Лучшие практики для работы с Worker и FlowAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Лучшие практики для работы с Worker и Flow

Сообщение Anonymous »

Я работаю над приложением, которое использует WorkerManager для фоновых задач, большую часть времени оно используется для отправки запросов на серверную часть и обработки полученных данных, я подумал, что было бы неплохо использовать LiveData (или Flow) для автоматического обновления пользовательского интерфейса после сохранения новых данных в базе данных, но он работает не так, как я ожидал, поток не выдает данные после их сохранения в базе данных
В моем фоновом работнике , у меня есть асинхронный метод, который загружает данные в серверную часть после того, как пользователь нажимает кнопку «Сохранить».

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

override suspend fun doWorkWithRetry(): Result = coroutineScope {
val one = processCreatedReceipts()
if (one.await() * other async methods *) {
Result.success()
} else {
throw RuntimeException("Failed to upload data")
}
}
@OptIn(DelicateCoroutinesApi::class)
private fun processCreatedReceipts() = GlobalScope.async {
val data: List = expensesRepo.findAllBySyncState(SyncState.UNSYNCED)
data.parallelStream().forEach { expense ->
val dto = expense.asCreateDto()
expensesService.createReceipt(dto).run { r, t ->
t?.let {
expensesRepo.updateSyncStateById(expense.id, SyncState.SYNC_FAILED)
throw RuntimeException("Data sync failed with error: ${t.message}")
}
r?.data?.result?.let { result ->
* save to received data to db *
}
}
}
}
Из пользовательского интерфейса я получаю список данных в виде потока, используя этот метод в объекте DAO

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

@Query(
"""
SELECT *
FROM files
WHERE resourceId == :id and sync_state is not 'PENDING_DELETE'
"""
)
abstract fun findByIdFlow(id: String?): Flow
Может ли это быть проблема с асинхронными методами, которые сохраняют данные в БД, или я получаю данные из БД неправильным способом?

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-and-flow
Ответить

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

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

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

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

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