LiveData не обновляется при изменении Db из Worker

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

Когда я пробую это от рабочего (WorkManager), LiveData, который содержит сообщения, не обновляется, даже если сообщение записывается в базу данных.

Небольшой пример (вставка не обновляет LiveData, но когда я перезапускаю приложение, появляется сообщение):

override fun doWork(): Result {
    appDatabase = appDatabase(applicationContext)
    val messageId = inputData.getString("messageId", "") ?: ""

    val message = appDatabase.messageDao().getMessage(messageId)
    appDatabase.messageDao().insertMessage(Message(message.conversationId, "XYZ 234234234234", "test", "test", SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.GERMANY).format(Date()), false))

    return Result.SUCCESS
}

Вне воркера все работает нормально.

1
0
313
2

Ответы 2

Не совсем уверен, в чем проблема, но теперь он работает.

Я сейчас ввожу все (базу данных и службы) в свой рабочий, возможно, это помогло (не уверен, имеет ли это значение, если я использую тот же экземпляр своей базы данных).

У меня такая же проблема. Вот ссылка на него. (stackoverflow.com/questions/60589304/…). Есть ли способ помочь мне, если вы нашли решение? Спасибо

james04 09.03.2020 16:10
Room.databaseBuilder(application, Database::class.java,"dbname")
            .allowMainThreadQueries()
            .enableMultiInstanceInvalidation() // maybe room database create multi instance. add this line solved my problem
            .fallbackToDestructiveMigration()
            .build()

проблема заключалась в том, что экземпляр базы данных комнаты создавался более одного раза. просто попробуйте добавить эту строку. все созданные экземпляры базы данных комнат могут быть отслежены и сделать источник данных недействительным при внесении изменений.

.enableMultiInstanceInvalidation() 

другое решение, я использую кинжал (внедрение зависимостей) и добавляю аннотацию @Singleton в функции предоставления экземпляра базы данных комнаты. для предотвращения создания экземпляра базы данных комнаты более одного раза.

Вам нужно детализировать ответ

Iliya Mashin 03.09.2020 20:08

Другие вопросы по теме