¿Por qué la operación de eliminación de sala (con RxJava) da un error de subproceso de interfaz de usuario incluso especificando subproceso de suscripción diferente?
Así que simplemente, el 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({
...
}, {
...
})
)
y error,
// Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
a idea simple que estaba pensando es especificarsubscribeOn(Schedulers.io())
y luego dar todo el trabajo a las manos mágicas de Rx, pero falló.
Entonces, ¿qué es lo que me estoy perdiendo?
Después de envolver como a continuación y usardeleteThingsWrapped
, empezo a trabajar. Pero aún no entiendo por qué el primer enfoque no funcionó
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>