【问题标题】:Android Room RxJava UndeliverableExceptionAndroid Room RxJava UndeliverableException
【发布时间】:2019-05-09 02:42:07
【问题描述】:

我正在尝试修复我发布到 Play 商店的应用中 crashlytics 报告的一些错误

我查看了日志,但我不知道如何修复它...

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>
}

但是我在崩溃报告中找不到我的错误日志。

我该怎么办?

【问题讨论】:

  • 你添加getWorkById订阅某种 CompositeDisposable 了吗?
  • 哦,当然,我编辑了这个,你能重新检查一下吗?

标签: android rx-java android-room


【解决方案1】:

好的,在我看来 onDestroy 是在 workDao.getWorkById(getToday()) 完成之前调用的。因此,当您的订户已被处置时,它会引发错误。您现在可以尝试通过点击此链接 https://stackoverflow.com/a/49387916/2164363

来处理来自 RxJava 本身的错误

干杯

【讨论】:

  • 哦,很好!那么我还有一个问题。如果我使用 RxJavaPlugins.setErrorHandler 处理异常,那么应该在订阅后运行的“我的逻辑”将不会运行,对吧?
  • 你的订阅者抛出了一个错误,所以最初它没有运行my logic,如果你的订阅者没有被释放,它会触发Log.e(TAG, "error: ${t.message}", t)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
相关资源
最近更新 更多