Почему Android Datastore всегда возвращает одно и то же значение при блокировке запуска ⇐ Android
-
Anonymous
Почему Android Datastore всегда возвращает одно и то же значение при блокировке запуска
Я использую Datastore уже давно. Сегодня мне пришлось прочитать значения в основной теме. Изучив документацию, я решил использовать блокировку запуска. Я создал длинное значение с именем LastInsertedId.
Я прочитал LastInsertedId во фрагменте A, затем перешел к фрагменту B и меняю значение LastInsertedId. Когда я возвращаюсь к фрагменту A, я снова читаю LastInsertedId. Но значение LastInsertedId осталось прежним. На самом деле его значение меняется, но я не могу прочитать его последнее значение.
Я думаю, это произошло потому, что фрагмент А не был уничтожен. Только onDestroyView вызывается и создается из onCreateView. Что я хочу, так это то, что мне нужно получить доступ к текущему значению LastInsertedID, когда я захочу, в основном потоке.
Когда я создаю его как переменную, он всегда возвращает одно и то же значение. Но когда я конвертирую его в функцию, он работает хорошо. Но я не думаю, что это лучшая практика. Как лучше всего получить доступ к этому значению? Спасибо.
private val Context.dataStore: DataStore по предпочтениямDataStore(name = "main") @Синглтон class DataStoreManager @Inject конструктор(@ApplicationContext appContext: Context) { частный val mainDataStore = appContext.dataStore приостановить веселье setLastInsertedId(lastId: Long) { mainDataStore.edit {основной -> основной[LAST_INSERTED_ID] = последний идентификатор } } // Возвращает всегда одно и то же значение vallastInsertedId: Long = runBlocking { mainDataStore.data.map { предпочтения -> предпочтения[LAST_INSERTED_ID] ?: 0 }.первый() } // Возвращает, как ожидалось весело LastInsertedId(): Long = runBlocking { mainDataStore.data.map { предпочтения -> предпочтения[LAST_INSERTED_ID] ?: 0 }.первый() } // Это тоже работает отлично, но мне нужен доступ в основном потоке. val lastInsertedId : Flow = mainDataStore.data.map { предпочтения -> предпочтения[LAST_INSERTED_ID] ?: Константы.DEFAULT_FOOD_ID } сопутствующий объект { частный val LAST_INSERTED_ID = longPreferencesKey("last_inserted_id") } }
Я использую Datastore уже давно. Сегодня мне пришлось прочитать значения в основной теме. Изучив документацию, я решил использовать блокировку запуска. Я создал длинное значение с именем LastInsertedId.
Я прочитал LastInsertedId во фрагменте A, затем перешел к фрагменту B и меняю значение LastInsertedId. Когда я возвращаюсь к фрагменту A, я снова читаю LastInsertedId. Но значение LastInsertedId осталось прежним. На самом деле его значение меняется, но я не могу прочитать его последнее значение.
Я думаю, это произошло потому, что фрагмент А не был уничтожен. Только onDestroyView вызывается и создается из onCreateView. Что я хочу, так это то, что мне нужно получить доступ к текущему значению LastInsertedID, когда я захочу, в основном потоке.
Когда я создаю его как переменную, он всегда возвращает одно и то же значение. Но когда я конвертирую его в функцию, он работает хорошо. Но я не думаю, что это лучшая практика. Как лучше всего получить доступ к этому значению? Спасибо.
private val Context.dataStore: DataStore по предпочтениямDataStore(name = "main") @Синглтон class DataStoreManager @Inject конструктор(@ApplicationContext appContext: Context) { частный val mainDataStore = appContext.dataStore приостановить веселье setLastInsertedId(lastId: Long) { mainDataStore.edit {основной -> основной[LAST_INSERTED_ID] = последний идентификатор } } // Возвращает всегда одно и то же значение vallastInsertedId: Long = runBlocking { mainDataStore.data.map { предпочтения -> предпочтения[LAST_INSERTED_ID] ?: 0 }.первый() } // Возвращает, как ожидалось весело LastInsertedId(): Long = runBlocking { mainDataStore.data.map { предпочтения -> предпочтения[LAST_INSERTED_ID] ?: 0 }.первый() } // Это тоже работает отлично, но мне нужен доступ в основном потоке. val lastInsertedId : Flow = mainDataStore.data.map { предпочтения -> предпочтения[LAST_INSERTED_ID] ?: Константы.DEFAULT_FOOD_ID } сопутствующий объект { частный val LAST_INSERTED_ID = longPreferencesKey("last_inserted_id") } }
Мобильная версия