Size: a a a

Android Developers

2020 September 04

DZ

Dmitry Zhgun in Android Developers
Привет,
Пытаюсь из PreferenceFragment'a слушать свойство, которое не отображается в фрагменте (myServiceState), для обновления кастомного preference в этом PreferenceFragment.
myServiceState меняется из кода в другом классе, пробую слушать через OnSharedPreferenceChangeListener в PreferenceFragment - он не срабатывает.
Есть ли способ отслеживать ручные (сделанные через sharedPreferences.edit()...apply()) изменения в SharedPreferences?
источник

DU

Dmitry Upovalov in Android Developers
"он не срабатывает" - а вроде бы должен. уверен, что те самые sp слушаешь?
источник

QH

Quantum Harmonizer in Android Developers
Dmitry Zhgun
Привет,
Пытаюсь из PreferenceFragment'a слушать свойство, которое не отображается в фрагменте (myServiceState), для обновления кастомного preference в этом PreferenceFragment.
myServiceState меняется из кода в другом классе, пробую слушать через OnSharedPreferenceChangeListener в PreferenceFragment - он не срабатывает.
Есть ли способ отслеживать ручные (сделанные через sharedPreferences.edit()...apply()) изменения в SharedPreferences?
Как слушаешь? Там подписчик по слабой ссылке держится.
источник

DZ

Dmitry Zhgun in Android Developers
Dmitry Upovalov
"он не срабатывает" - а вроде бы должен. уверен, что те самые sp слушаешь?
Уверен
источник

DZ

Dmitry Zhgun in Android Developers
Quantum Harmonizer
Как слушаешь? Там подписчик по слабой ссылке держится.
private var preferenceChangeListener в PreferenceFragment
Регаю в onResume
Разрегаю в onPause
источник

QH

Quantum Harmonizer in Android Developers
Dmitry Zhgun
private var preferenceChangeListener в PreferenceFragment
Регаю в onResume
Разрегаю в onPause
а это именно те самые профы?)
источник

DZ

Dmitry Zhgun in Android Developers
Quantum Harmonizer
а это именно те самые профы?)
Да, прописано в
 override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
       preferenceManager.sharedPreferencesName = AppConstants.DEFAULT_PREFERENCES_NAME
       setPreferencesFromResource(R.xml.preferences, rootKey)
   }
источник

DZ

Dmitry Zhgun in Android Developers
Реагирует на все изменения из вьюхи, на остальные ноль внимания
источник

DZ

Dmitry Zhgun in Android Developers
Т.е. если я тапаю SwitchPreference в этом PreferenceFragment -> все ок, слушатель отрабатывает.
Извне по edit() -> apply() - нифига
источник

DZ

Dmitry Zhgun in Android Developers
Если имеет значение, устанавливаю свойства так:
 var timeout: RegStateTimeout
       get() = RegStateTimeout.valueOf(sharedPreferences.getString(AppConstants.PREF_TIMEOUT, "0")!!)
       set(timeout) =
           sharedPreferences.edit()
                   .putString(AppConstants.PREF_TIMEOUT,
                           timeout.name)
                   .apply()
источник

DZ

Dmitry Zhgun in Android Developers
Если делаю изменение этого свойства из PreferenceFragment - все работает...
источник

DU

Dmitry Upovalov in Android Developers
А что в root Key?
источник

DU

Dmitry Upovalov in Android Developers
И что в default prefs name
источник

DZ

Dmitry Zhgun in Android Developers
Dmitry Upovalov
А что в root Key?
Ничего своего не указывал.
в константе "my_preferences"
Заметил ещё одно странное поведение (мб все изза дебага?): первый раз слушатель отрабатывает, второй и последующие - нет.
источник

DU

Dmitry Upovalov in Android Developers
Ну дебагом посмотри что в rootKey
источник

DU

Dmitry Upovalov in Android Developers
Или проверь какие файлы shared_prefs лежат в данных приложения.
источник

RH

Remie Hamilton in Android Developers
(Room)
@Query("SELECT Favorites ...")
fun getFavorites(): LiveData<List<Item>>

val favoritesList: LiveData<List<Item>>? = repo.getFavoriteList()

Проблема: в определенный момент заменяю файл БД и получаю
SQLiteDiskIOException: disk I/O error (code 522 SQLITE_IOERR_SHORT_READ): , while compiling: PRAGMA journal_mode
Как правильно ловить это исключение?
Может нужно перед удалением и заменой файла БД как-то отписывать от БД всех слушателей?
Памагити🙀
источник

DU

Dmitry Upovalov in Android Developers
Dmitry Zhgun
Ничего своего не указывал.
в константе "my_preferences"
Заметил ещё одно странное поведение (мб все изза дебага?): первый раз слушатель отрабатывает, второй и последующие - нет.
то есть один раз всё корректно работает даже для этого поля? и проблема только на второй раз появляется?
источник

DZ

Dmitry Zhgun in Android Developers
Dmitry Upovalov
то есть один раз всё корректно работает даже для этого поля? и проблема только на второй раз появляется?
Да.
Файл только один - с тем именем, что я указываю.
rootKey = null
источник

d

danilshik in Android Developers
Remie Hamilton
(Room)
@Query("SELECT Favorites ...")
fun getFavorites(): LiveData<List<Item>>

val favoritesList: LiveData<List<Item>>? = repo.getFavoriteList()

Проблема: в определенный момент заменяю файл БД и получаю
SQLiteDiskIOException: disk I/O error (code 522 SQLITE_IOERR_SHORT_READ): , while compiling: PRAGMA journal_mode
Как правильно ловить это исключение?
Может нужно перед удалением и заменой файла БД как-то отписывать от БД всех слушателей?
Памагити🙀
А зачем файл вообще в бд хранить?
источник