Данные в SharedPreferences не всегда сохраняются

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
ocean911
Сообщения: 5
Зарегистрирован: 09 май 2013, 10:27

Данные в SharedPreferences не всегда сохраняются

Сообщение ocean911 » 25 мар 2014, 10:44

У меня есть 2 процеса и очень много настроек, которие нужни в обоих проецесах. И иногда они не всегда сохраняются.
Сохраняю их:
[syntax=java] SharedPreferences.Editor editor = getSharedPreferences(Constants.KEY_PREF, Context.MODE_MULTI_PROCESS).edit();
editor.putInt(Constants.KEY_PREF_QUEUE_SORT_BY_POSITION, position);
editor.putInt(Constants.KEY_PREF_QUEUE_SORT_BY, by);
editor.apply();[/syntax]
И так далее. Но после вихода из приложения кнопкой "back" а потом swap app из Recent Apps и зайти обратно - дание не те чо нужно.
Или я вибираю и сохраняю сортировку, проверяю - она сохранена, но когда передаю дание в AsyncTask они не те что нужно.

Есть несколько (noobs) вопросов:
- я поменял commit() на apply() но не везьде, может бить что система делает где-то commit, потому держить в памяти и дание не обовляются.
- ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
- еще читал что если переменние в static то в SharedPreferences может записатся не те дание которие сейчас там находятся, правда ли єто?

Спасибо за помощь.

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Данные в SharedPreferences не всегда сохраняются

Сообщение mdzht » 25 мар 2014, 17:02

ocean911 писал(а): - ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
Вы имеете ввиду между getApplication() и getApplicationContext()?
«Life is too short to spend rewriting code»

ocean911
Сообщения: 5
Зарегистрирован: 09 май 2013, 10:27

Re: Данные в SharedPreferences не всегда сохраняются

Сообщение ocean911 » 25 мар 2014, 18:19

mdzht писал(а):
ocean911 писал(а): - ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
Вы имеете ввиду между getApplication() и getApplicationContext()?
Нет getActivity() в Fragment і getApplicationContext() например в сервисе?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Данные в SharedPreferences не всегда сохраняются

Сообщение Mikhail_dev » 25 мар 2014, 18:37

Читаем статью по этому поводу в моей подписи.

ocean911
Сообщения: 5
Зарегистрирован: 09 май 2013, 10:27

Re: Данные в SharedPreferences не всегда сохраняются

Сообщение ocean911 » 25 мар 2014, 19:17

m090050 писал(а):Читаем статью по этому поводу в моей подписи.
Читал, но не понял где ловить BroadcastReceiver. в MainActivity ? или в класе Preferences ?

И что лучше делать commit или apply в моем случае?

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Данные в SharedPreferences не всегда сохраняются

Сообщение mdzht » 25 мар 2014, 20:56

ocean911 писал(а):
m090050 писал(а):Читаем статью по этому поводу в моей подписи.
Читал, но не понял где ловить BroadcastReceiver. в MainActivity ? или в класе Preferences ?

И что лучше делать commit или apply в моем случае?
обработайте
[syntax=java5] @Override
public void onBackPressed() {
super.onBackPressed();
// to do
} [/syntax]
я думаю в вашем случае можно ограничиться с commit()
«Life is too short to spend rewriting code»

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Данные в SharedPreferences не всегда сохраняются

Сообщение Mikhail_dev » 25 мар 2014, 22:25

- я поменял commit() на apply() но не везьде, может бить что система делает где-то commit, потому держить в памяти и дание не обовляются.
apply() was added in 2.3, it commits without returning a boolean indicating success or failure.
commit() returns true if the save works, false otherwise.
apply() was added as the android dev team noticed that most no one took notice of the return value, so apply is faster as it asynchronous.
http://stackoverflow.com/questions/5960 ... preference
Коммит возвращает всегда булево значение, тогда когда apply не возвращает его. Короче для ручного изменения настроек никакой разницы. Лучше юзать коммит, он был всегда, в отличие от apply.
- ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
Для вызова настроек никакой разницы, но контекст как объект не синглтон, их бывает много.
- еще читал что если переменние в static то в SharedPreferences может записатся не те дание которие сейчас там находятся, правда ли єто?
Неправда. Возможно вы что-то не так прочитали.

Ответить