Почему Android Datastore всегда возвращает одно и то же значение при блокировке запускаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему Android Datastore всегда возвращает одно и то же значение при блокировке запуска

Сообщение Anonymous »


Я использую 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") } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»