如何在RxJava地图操作符内部使应用程序崩溃

问题描述 投票:0回答:2

例如,当调用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语句之前调用它,则会使应用程序崩溃。

android kotlin rx-java2 rx-android
2个回答
2
投票

如果我在return语句之前调用它,则会使应用程序崩溃。

它崩溃是因为getCategories方法正在Android的主线程上运行以构建rx链。

在地图运算符中引发的NullPointerException不会使应用程序崩溃。

它不会使应用程序崩溃,因为该链被预订了不是Android主线程的线程。例如。您的连锁店有.subscribeOn(Schedulers.io())

我发现的唯一解决方案是在我的错误处理程序中引发RuntimeException。

这是您根据此document设计的链条的预期设计:

一个Observable通常不会引发异常。相反,它通过使用onError通知终止Observable序列来通知任何观察者发生了不可恢复的错误。

因此,观察者或操作员应该捕获异常,而不是捕获异常。


0
投票

好,所以我认为最接近要实现的目标是通过在onError中调用的错误处理程序中调用Exceptions.propagate(throwable)。感谢您为我指出正确的方向@Gustavo @ TooManyEduardos2

© www.soinside.com 2019 - 2024. All rights reserved.