首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理map() RxJava中的异常

如何处理map() RxJava中的异常
EN

Stack Overflow用户
提问于 2022-02-15 09:54:18
回答 2查看 295关注 0票数 0

我正在调用一个API,它会抛出404状态代码,并且由于该应用程序崩溃。下面提到了代码片段:

代码语言:javascript
复制
fun loadAndSavedata(
    type: Type,
    bookmark: String? = null,
): Single<MetaData> {
    return loadFilesByType(type, bookmark)
        .map { response ->
            if (!response.isSuccessfulAndHasBody()) {
                //This line gets pointed as cause
                throw OfflineModeException(response)
            }
                response.body()!!

        }
        .flatMap { loadNextPages(it, type) }
}

在logcat中,我收到的错误是:

代码语言:javascript
复制
Process: com.example.app, PID: 23797
io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | com.com.example.app.models.OfflineModeException: HTTP 404 
    at io.reactivex.rxjava3.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
    at io.reactivex.rxjava3.internal.operators.single.SingleZipArray$ZipCoordinator.innerError(SingleZipArray.java:139)
    at io.reactivex.rxjava3.internal.operators.single.SingleZipArray$ZipSingleObserver.onError(SingleZipArray.java:175)
    at io.reactivex.rxjava3.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onError(SingleFlatMap.java:91)
    at io.reactivex.rxjava3.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onError(SingleFlatMap.java:91)
    at io.reactivex.rxjava3.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onError(SingleFlatMap.java:91)
    at io.reactivex.rxjava3.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onError(SingleFlatMap.java:91)
    at io.reactivex.rxjava3.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:70)
    at io.reactivex.rxjava3.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:61)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableSingleSingle$SingleElementObserver.onComplete(ObservableSingleSingle.java:110)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onComplete(ObservableSubscribeOn.java:68)
    at retrofit2.adapter.rxjava3.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:52)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13095)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
    at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:589)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:920)
 Caused by: com.com.example.app.models.OfflineModeException: HTTP 404 

有人能指导我如何处理这个错误并避免崩溃吗?

EN

回答 2

Stack Overflow用户

发布于 2022-02-15 10:02:44

throw OfflineModeException(response) //您将显式地对不成功的响应抛出异常。移除这一行或添加try catch块

票数 0
EN

Stack Overflow用户

发布于 2022-02-15 10:37:40

您不能直接使用抛出,因为映射函数接受functional Function。在Function的抽象方法是R>( t),所以在应用函数中不存在抛出,所以在地图中不尝试catch块就不能使用抛出关键字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71124373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档