例如,当调用RxJava地图运算符后发生NullPointerException时,应用程序不会崩溃。我希望应用程序在发生这种情况时崩溃,以便它可以将报告提交给crashlytics等。
我尝试在try / catch块中使用Exceptions.propagate()
,但这没用。
我发现的唯一解决方案是在错误处理程序中抛出RuntimeException
。
override fun getCategories(): Single<List<Category>> {
return ApiManager
.getCategoriesService()
.getCategories()
.map { categoriesResponse ->
throw KotlinNullPointerException
categoriesResponse.categories?.map { categoryResponse ->
CategoryMapper().mapFromRemote(categoryResponse)
}
}
}
在地图运算符内引发的NullPointerException不会使应用程序崩溃。如果我在return语句之前调用它,则会使应用程序崩溃。
如果我在return语句之前调用它,则会使应用程序崩溃。
它崩溃是因为getCategories
方法正在Android的主线程上运行以构建rx链。
在地图运算符中引发的NullPointerException不会使应用程序崩溃。
它不会使应用程序崩溃,因为该链被预订了不是Android主线程的线程。例如。您的连锁店有.subscribeOn(Schedulers.io())
。
我发现的唯一解决方案是在我的错误处理程序中引发RuntimeException。
这是您根据此document设计的链条的预期设计:
一个Observable通常不会引发异常。相反,它通过使用onError通知终止Observable序列来通知任何观察者发生了不可恢复的错误。
因此,观察者或操作员应该捕获异常,而不是捕获异常。
好,所以我认为最接近要实现的目标是通过在onError中调用的错误处理程序中调用Exceptions.propagate(throwable)
。感谢您为我指出正确的方向@Gustavo @ TooManyEduardos2