Android Room RxJava UndeliverableException - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь исправить ошибку, о которой сообщают краш-лайтсы, в моем приложении, которое я выпустил для воспроизведения в магазине

Я проверил журнал, но не знаю, как его исправить ...

io.reactivex.exceptions.UndeliverableException: 
  at io.reactivex.plugins.RxJavaPlugins.onError (RxJavaPlugins.java:367)
  at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual (SingleFromCallable.java:50)
  at io.reactivex.Single.subscribe (Single.java:3603)
  at io.reactivex.internal.operators.maybe.MaybeFilterSingle.subscribeActual (MaybeFilterSingle.java:40)
  at io.reactivex.Maybe.subscribe (Maybe.java:4290)
  at io.reactivex.internal.operators.maybe.MaybeSubscribeOn$SubscribeTask.run (MaybeSubscribeOn.java:54)
  at io.reactivex.Scheduler$DisposeTask.run (Scheduler.java:578)
  at io.reactivex.internal.schedulers.ScheduledRunnable.run (ScheduledRunnable.java:66)
  at io.reactivex.internal.schedulers.ScheduledRunnable.call (ScheduledRunnable.java:57)
  at java.util.concurrent.FutureTask.run (FutureTask.java:237)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:272)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
  at java.lang.Thread.run (Thread.java:762)
Caused by: android.arch.b.b.b: 
  at com.eastriver.workingtimer.data.source.WorkDao_Impl$4.call (WorkDao_Impl.java:172)
  at com.eastriver.workingtimer.data.source.WorkDao_Impl$4.call (WorkDao_Impl.java:129)
  at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual (SingleFromCallable.java:44)
  at io.reactivex.Single.subscribe (Single.java:3603)

На самом деле весь мой rx-код обрабатывает ошибку следующим образом:

class MyIntentService(
        private val disposable: CompositeDisposable = CompositeDisposable()
) : IntentService("MyIntentService") {

    ...

    override fun onHandleIntent(intent: Intent?) {
        disposable.add(
            workDao.getWorkById(getToday())
                .subscribeOn(Schedulers.io())
                .subscribe({
                    // my logic
                }, { t ->
                    Log.e(TAG, "error: ${t.message}", t)
                })
        )
    }

    override fun onDestroy() {
        super.onDestroy()
        disposable.clear()
    }
}

И WorkDao:

@Dao
interface WorkDao {
    @Query("SELECT * FROM work WHERE id = :id")
    fun getWorkById(id: Long): Single<Work>
}

Но я не могу найти свой журнал ошибок вотчет о сбое.

Что мне делать?

1 Ответ

1 голос
/ 09 мая 2019

Хорошо, мне кажется, что onDestroy вызывается до того, как workDao.getWorkById(getToday()) завершено.Так что он выдает ошибку, пока ваш подписчик уже удален.Теперь вы можете попробовать обработать ошибки самого RxJava, перейдя по этой ссылке https://stackoverflow.com/a/49387916/2164363

Cheers

...