Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 207

SharedPreferences стираются после перезапуска приложения

19.07.2016, 11:01. Показов 2851. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2016, 11:01
Ответы с готовыми решениями:

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

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

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

10
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.07.2016, 11:11
где и когда вызывается метод save? он хоть вызывается, инфа 146% ?

где и когда вызывается код который вычитывает настройки? он хоть вызывается, инфа 146% ?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
19.07.2016, 12:48
Baron Rojo, привет. А сделай вывод лога (сам для себя) по окончании сего процесса, что данные записались и существуют. Т.е. прочитай и выведи в лог.
0
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 207
19.07.2016, 17:54  [ТС]
Метод save вызывается. И данные получаемые из SP в порядке. НО. Когда я закрываю приложение и запускаю снова приходится и данные вводить заново. Единственное что запись выполняет одна Activity, а чтение- другая.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.07.2016, 18:00
код весь будет или гадать?
0
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 207
19.07.2016, 18:02  [ТС]
Вот активити которая сохраняет
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
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 18:05
Нуачо, прикольно
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.07.2016, 18:07
так getPreferences привязывается к активити
надо использовать getSharedPreferences()
0
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 207
19.07.2016, 18:19  [ТС]
Где именно из надо использовать ?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.07.2016, 18:35
Лучший ответ Сообщение было отмечено Baron Rojo как решение

Решение

это надо использовать вместо getPreferences
0
2 / 2 / 0
Регистрация: 21.11.2012
Сообщений: 207
19.07.2016, 18:57  [ТС]
Вас понял. Спасибо огромное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2016, 18:57
Помогаю со студенческими работами здесь

Обновление dataGrid сразу после добавления/удаления записи, а не после перезапуска приложения
Здравствуйте, написал в с# процедуры на добавление и удаления данных, при нажатии соответственных кнопок, всё работает, но проблема в том...

Сохранение информации после перезапуска приложения
Всем здравствуйте, возник такой вопрос нужна переменная в которой будет храниться какая либо информация в данном случае числовое значение,...

Сохранение элементов после перезапуска приложения
Как сделать, чтобы по нажатию кнопки в приложении создавалась новая кнопка, и после перезапуска она оставалась? Нужно ли программно...

Сохранение элементов ListBox после перезапуска приложения
Как можно сохранить данные в ListBox после выхода из проги? В Aplication Setting, создавал параметр Name, это не помогло. Что делать?

Сохранение значения TextBox после перезапуска приложения
Здрасти. Мне нужно сохранять значения textbox после перезапуска софта. Смотрите, допустим у меня есть форма, на ней TextBox1, TextBox2,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru