Por que a operação de exclusão de sala (com RxJava) fornece erro de thread da interface do usuário, mesmo especificando diferentes threads de inscrição?
Então, simplesmente, o DAO
@Query("DELETE FROM Things WHERE someIdOfTheThing IN (:listOfId)")
abstract fun deleteThings(listOfId: MutableList<String>): Maybe<Int>
uso
mDisposables.add(mThingsDao
.deleteThings(listOfId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
...
}, {
...
})
)
e erro,
// Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
A idéia simples que eu estava pensando é especificarsubscribeOn(Schedulers.io())
e depois entregue todo o trabalho às mãos mágicas de Rx, mas falhou.
Então, o que sinto falta?
Depois de embrulhar como abaixo e usandodeleteThingsWrapped
, começou a trabalhar. Mas ainda não entendo por que a primeira abordagem não funcionou
open fun deleteThingsWrapped(listOfId: MutableList<String>): Maybe<Int> {
return Maybe.create(object : MaybeOnSubscribe<Int> {
override fun subscribe(emitter: MaybeEmitter<Int>) {
emitter.onSuccess(deleteThings(listOfId))
}
})
}
@Query("DELETE FROM Things WHERE someIdOfTheThing IN (:listOfId)")
abstract fun deleteThings(listOfId: MutableList<String>): Maybe<Int>