Хранилище прототипных данных – потерянные данныеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Хранилище прототипных данных – потерянные данные

Сообщение Anonymous »

У меня проблема с хранилищем протоданных. Я сохраняю TripListItem и получаю MutableList. Это решение работает, но только за сеанс. При выходе из приложения я потерял список, и у меня остался только один элемент. Я не знаю, почему это происходит.

Код: Выделить всё

interface TripListRepository {
suspend fun saveListDataTile(data: MutableList)
suspend fun getListDataTile(): MutableList}

val Context.dataStore: DataStore by dataStore(fileName = "TRIP_LIST", serializer = TripListSerializer)

class TripListRepositoryImpl @Inject constructor(
@ApplicationContext private val context: Context,
) : TripListRepository {

override suspend fun saveListDataTile(data: MutableList) {
context.dataStore.updateData { it.copy(tripList = data) }
}

override suspend fun getListDataTile(): MutableList = context.dataStore.data.first().tripList

Код: Выделить всё

object TripListSerializer : Serializer {
override val defaultValue: TripListData = TripListData(mutableListOf())

override suspend fun readFrom(input: InputStream): TripListData {
return try {
Json.decodeFromString(
deserializer = TripListData.serializer(),
string = input.readBytes().decodeToString()
)
} catch (e: SerializationException) {
Log.d("error read from method", e.message.orEmpty())
defaultValue
}
}

override suspend fun writeTo(t: TripListData, output: OutputStream) {
output.write(
Json.encodeToString(
serializer = TripListData.serializer(),
value = t
).encodeToByteArray()
)
}

Код: Выделить всё

    private fun onNextClicked() {
val item = TripListItemData(
city = _uiState.value.toCityName,
country = _uiState.value.toCountryName,
date = _uiState.value.date.let { it.convertMillisToDate(it) }
)

viewModelScope.launch {
runCatching {
if (tripListRepository.getListDataTile().isEmpty()) {
tripListRepository.saveListDataTile(data = mutableListOf(item))
} else {
tripListRepository.getListDataTile().add(item)
_navigationEvents.trySend(TripDataDetailsNavigationEvent.OnNextClicked)
}
}
}
}

viewModelScope.launch {
runCatching {
_uiState.update {
it.copy(
tripList = repository.getListDataTile())}}}
Кто-нибудь знает, почему это произошло?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -lost-data
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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