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

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

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

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

19.07.2016, 11:01. Просмотров 185. Ответов 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();
    }
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
19.07.2016, 11:11     SharedPreferences стираются после перезапуска приложения #2
где и когда вызывается метод save? он хоть вызывается, инфа 146% ?

где и когда вызывается код который вычитывает настройки? он хоть вызывается, инфа 146% ?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
19.07.2016, 12:48     SharedPreferences стираются после перезапуска приложения #3
Baron Rojo, привет. А сделай вывод лога (сам для себя) по окончании сего процесса, что данные записались и существуют. Т.е. прочитай и выведи в лог.
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 184
19.07.2016, 17:54  [ТС]     SharedPreferences стираются после перезапуска приложения #4
Метод save вызывается. И данные получаемые из SP в порядке. НО. Когда я закрываю приложение и запускаю снова приходится и данные вводить заново. Единственное что запись выполняет одна Activity, а чтение- другая.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
19.07.2016, 18:00     SharedPreferences стираются после перезапуска приложения #5
код весь будет или гадать?
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 184
19.07.2016, 18:02  [ТС]     SharedPreferences стираются после перезапуска приложения #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);
 
        }
 
 
    }
 
}
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
19.07.2016, 18:05     SharedPreferences стираются после перезапуска приложения #7
Нуачо, прикольно
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
19.07.2016, 18:07     SharedPreferences стираются после перезапуска приложения #8
так getPreferences привязывается к активити
надо использовать getSharedPreferences()
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 184
19.07.2016, 18:19  [ТС]     SharedPreferences стираются после перезапуска приложения #9
Где именно из надо использовать ?
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
19.07.2016, 18:35     SharedPreferences стираются после перезапуска приложения #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
это надо использовать вместо getPreferences
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2016, 18:57     SharedPreferences стираются после перезапуска приложения
Еще ссылки по теме:
Android SharedPreferences
Android SharedPreferences
Android SharedPreferences, HashMap
Android Array в SharedPreferences
Сохранение в SharedPreferences Android

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

Или воспользуйтесь поиском по форуму:
Baron Rojo
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 184
19.07.2016, 18:57  [ТС]     SharedPreferences стираются после перезапуска приложения #11
Вас понял. Спасибо огромное.
Yandex
Объявления
19.07.2016, 18:57     SharedPreferences стираются после перезапуска приложения
Ответ Создать тему
Опции темы

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