Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Baron Rojo
2 / 2 / 8
Регистрация: 21.11.2012
Сообщений: 202
#1

SharedPreferences стираются после перезапуска приложения - Программирование Android

19.07.2016, 11:01. Просмотров 254. Ответов 10
Метки нет (Все метки)

Доброго времени суток. В моем приложении пробую хранить его данные конфигурации (адрес сервера , идентификатор пользователя) при помощи SharedPreferences.
вот код собственно сохраняющий их. Теперь вопрос: я что то не так делаю? Или все так и должно быть? И если все так и должно быть то есть ли какой нибудь другой способ хранения данных конфигурации так чтобы после перезапуска приложения они оставались ?

Java
1
2
3
4
5
6
7
private void save(String preference_to_save, String TAG){
 
        s_pref= getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor ed = s_pref.edit();
        ed.putString(TAG, preference_to_save);
        ed.commit();
    }

http://www.cyberforum.ru/android-dev/thread1436942.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2016, 11:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос SharedPreferences стираются после перезапуска приложения (Программирование Android):

При повторном запуске приложения не загружаются сохраненные значения SharedPreferences
Всем привет. сразу пишу, что андроид начал изучать недавно. В общем, в...

При переносе приложения на карту памяти где хранятся SharedPreferences, SQLite базы и тп ?
Где хранятся настройки SharedPreferences, SQLite базы и тд? Нужно ли что то...

SharedPreferences
как сохранить целое значение в SharedPreferences?

SharedPreferences
String PR = "key"; SharedPreferences mySharedPreferences =...

SharedPreferences
Можно как-то сохранить SharedPreferences файл после перезагрузки девайса? ...

10
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
19.07.2016, 11:11 #2
где и когда вызывается метод save? он хоть вызывается, инфа 146% ?

где и когда вызывается код который вычитывает настройки? он хоть вызывается, инфа 146% ?
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
19.07.2016, 12:48 #3
Baron Rojo, привет. А сделай вывод лога (сам для себя) по окончании сего процесса, что данные записались и существуют. Т.е. прочитай и выведи в лог.
0
Baron Rojo
2 / 2 / 8
Регистрация: 21.11.2012
Сообщений: 202
19.07.2016, 17:54  [ТС] #4
Метод save вызывается. И данные получаемые из SP в порядке. НО. Когда я закрываю приложение и запускаю снова приходится и данные вводить заново. Единственное что запись выполняет одна Activity, а чтение- другая.
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
19.07.2016, 18:00 #5
код весь будет или гадать?
0
Baron Rojo
2 / 2 / 8
Регистрация: 21.11.2012
Сообщений: 202
19.07.2016, 18:02  [ТС] #6
Вот активити которая сохраняет
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package example.com.cargo;
 
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
 
/**
 
 */
public class GeneralSettingsActivity extends Activity {
 
    EditText et_ip_address;
    EditText et_car_type;
    EditText et_district;
 public static    SharedPreferences s_pref;
 
 
    @Override
    public  void onCreate(Bundle sis)
    {
super.onCreate(sis);
        setContentView(R.layout.general_settings_activity);
        et_ip_address=(EditText)findViewById(R.id.ipaddr);
        et_car_type = (EditText) findViewById(R.id.et_car_type);
        et_district=(EditText)findViewById(R.id.et_district);
    }
 
    public  void save_district(View v){
 
        save("district",et_district.getText().toString());
    }
    public  void ip_addr_save(View v){
 
        save("IP",et_ip_address.getText().toString());
    }
    public  void car_type_save (View v){
        save("car_type",et_car_type.getText().toString());
    }
    private void save(String preference_to_save, String TAG){
 
        s_pref= getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor ed = s_pref.edit();
        ed.putString(TAG, preference_to_save);
        ed.commit();
    }
}

Вот так которая вызывает то что сохранено

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package example.com.cargo;
 
import android.app.Activity;
 
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
 
import java.security.cert.TrustAnchor;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
 
/**
 
 */
public class DriversActivity extends Activity
{   Resources res;
    //EditText etIpAddr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drivers_layout);
        res=getResources();
     //   etIpAddr=(EditText)findViewById(R.id.ipaddr);
    }
    public void  driver_settings_click(View v){
 
        try{
            Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
            startActivity(intent);
        }
        catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(),ex.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    private String load_preference(String name){
 
        String savedText =     GeneralSettingsActivity.s_pref.getString(name, "");
  //      Toast.makeText(getApplicationContext(),savedText,Toast.LENGTH_LONG).show();
        return  savedText;
    }
    private String load_preference(String name,String def){
 
        String savedText =     GeneralSettingsActivity.s_pref.getString(name, def);
//        Toast.makeText(getApplicationContext(),savedText,Toast.LENGTH_LONG).show();
        return  savedText;
    }
    public  void update_orders_button_click(View v){
ASConnectUpdt asc= new ASConnectUpdt();
        asc.execute(load_preference("IP")); //Здесь мы задаем айпи полученыный из поля ввода
        String result="-1"; //Переменная для хранения результат
 
        try{
        result= asc.get();
 
 
        } //Собственно получаем результат
 
        catch (InterruptedException ex){Toast.makeText(getApplicationContext(),ex.getMessage()+"\n"+ex.toString(),Toast.LENGTH_SHORT).show();//Пока так
         }
        catch (ExecutionException ex){Toast.makeText(getApplicationContext(),ex.getMessage()+"\n"+ex.toString(),Toast.LENGTH_SHORT).show();//Пока так
        }
 
        final  ArrayList<Order>     orders = ServerManager.parse_update_response(result); //из полченного ответа вынимаем
       //Создакем жлементы класса Order и в отдельном потоке кладем их в локальную БД.
 
//Resources r=getResources();
        //
   DBManager dbManager= new DBManager(getApplicationContext(), DBManager.DATABASE_NAME,null,1); // вызовем конструктор нашего класса
     final   SQLiteDatabase db= dbManager.getWritableDatabase(); // получим бд
      db.execSQL("DELETE FROM orders"); //На всякий случай очитсим  локальную бд от старых данных.
        db.execSQL("VACUUM");
        new Thread(){
        @Override
        public  void run(){
            for(Order o :orders) {
                ContentValues cv = new ContentValues();
                cv.put(DBManager.ID_COLUMN, o.getID());
                cv.put(DBManager.SOURCE_COLUMN, o.getSource());
                cv.put(DBManager.DIST_COLUMN, o.getDist());
                cv.put(DBManager.CAR_TYPE_COLUMN, o.getCar_type());
                cv.put(DBManager.PRICE_COLUMN, o.getPrice());
                cv.put(DBManager.ACTIVE_COLUMN, o.getActive());
                cv.put(DBManager.CANCELED_COLUMN, o.getCanceled());
                cv.put(DBManager.TAKEN_COLUMN, o.getTaken());
                cv.put(DBManager.COMMNET_COLUMN, o.getComment());
                cv.put(DBManager.point_B_COLUMN, o.getPoint_B());
                cv.put(DBManager.PHONE_COLUMN, o.getPhone());
                db.insert("orders", null, cv);
 
            }
        }
        }.start();
 
 
 
 
    }
 
    //Класс отвечает за подклчние и отправку запроса на сервер.
    class ASConnectUpdt extends AsyncTask<String, Void, String>
    {
        String r;
        private String server_request(String address) {
String s=res.getString(R.string.update_orders).replace("val0",load_preference("car_type","gazel"));
            ServerManager sm = new ServerManager(address, s,getApplicationContext());
            String st=sm.read();
            // sm=null;
            return     st;
 
        }
        protected String doInBackground(String... params) {
            String st="";
 
            for (String p :params) {
                st += server_request(p);
            }
 
            return st;
        }
 
        protected void onPostExecute(String result)
        {
            super.onPostExecute(result);
 
        }
 
 
    }
 
}
0
OlegJV
103 / 103 / 28
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 18:05 #7
Нуачо, прикольно
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
19.07.2016, 18:07 #8
так getPreferences привязывается к активити
надо использовать getSharedPreferences()
0
Baron Rojo
2 / 2 / 8
Регистрация: 21.11.2012
Сообщений: 202
19.07.2016, 18:19  [ТС] #9
Где именно из надо использовать ?
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
19.07.2016, 18:35 #10
Лучший ответ Сообщение было отмечено Baron Rojo как решение

Решение

это надо использовать вместо getPreferences
0
Baron Rojo
2 / 2 / 8
Регистрация: 21.11.2012
Сообщений: 202
19.07.2016, 18:57  [ТС] #11
Вас понял. Спасибо огромное.
0
19.07.2016, 18:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2016, 18:57
Привет! Вот еще темы с решениями:

SharedPreferences
Доброй ночи. Вышла заминка с бд класса SharedPreferences. Вообщем вот код: ...

SharedPreferences
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class...

SharedPreferences
Всем привет, вопрос: Как через SharedPreferences сохранять &quot;String текст&quot;, я...

Array в SharedPreferences
Добрый вечер! Вопрос заключается в том, можно ли сохранить настройки приложения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru