Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 187
#1

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

19.07.2016, 11:01. Просмотров 206. Ответов 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();
    }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2016, 11:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SharedPreferences стираются после перезапуска приложения (Программирование Android):

Органайзер обновляется только после перезапуска приложения - Программирование Android
Вот пытаюсь сделать свой органайзер, но что то не идет, все повисло на обновлении списка. Обновляется только после перезапуска...

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

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

SharedPreferences - Программирование Android
Можно как-то сохранить SharedPreferences файл после перезагрузки девайса? P.S. как хранятся данные на девайсе в приложении Вк и ему...

SharedPreferences - Программирование Android
String PR = "key"; SharedPreferences mySharedPreferences = getSharedPreferences(PR, Activity.MODE_PRIVATE); String...

SharedPreferences - Программирование Android
Всем привет, вопрос: Как через SharedPreferences сохранять "String текст", я многое перепробовал но вылет... Вылет... Не могли бы...

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

где и когда вызывается код который вычитывает настройки? он хоть вызывается, инфа 146% ?
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
19.07.2016, 12:48 #3
Baron Rojo, привет. А сделай вывод лога (сам для себя) по окончании сего процесса, что данные записались и существуют. Т.е. прочитай и выведи в лог.
0
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 187
19.07.2016, 17:54  [ТС] #4
Метод save вызывается. И данные получаемые из SP в порядке. НО. Когда я закрываю приложение и запускаю снова приходится и данные вводить заново. Единственное что запись выполняет одна Activity, а чтение- другая.
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
19.07.2016, 18:00 #5
код весь будет или гадать?
0
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 187
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 / 29
Регистрация: 13.03.2016
Сообщений: 472
19.07.2016, 18:05 #7
Нуачо, прикольно
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
19.07.2016, 18:07 #8
так getPreferences привязывается к активити
надо использовать getSharedPreferences()
0
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 187
19.07.2016, 18:19  [ТС] #9
Где именно из надо использовать ?
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
19.07.2016, 18:35 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
это надо использовать вместо getPreferences
0
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 187
19.07.2016, 18:57  [ТС] #11
Вас понял. Спасибо огромное.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2016, 18:57
Привет! Вот еще темы с ответами:

SharedPreferences - Программирование Android
Доброй ночи. Вышла заминка с бд класса SharedPreferences. Вообщем вот код: import android.app.Activity; import...

SharedPreferences - Программирование Android
как сохранить целое значение в SharedPreferences?

SharedPreferences - Программирование Android
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class MainActivity extends Activity { Intent intent; ...

Сохранение в SharedPreferences - Программирование Android
Вобщем, я хочу сделать так, чтобы при нажатии на кнопку создавалась на экране ещё одна кнопка(и так можно сделать неограниченное количество...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
19.07.2016, 18:57
Ответ Создать тему
Опции темы

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