当前位置: 首页 > 知识库问答 >
问题:

onError(RxJava)后如何保留订阅服务器

傅星光
2023-03-14

第一,我试过了

// used retrofit
public interface ApiService {
    @GET(/get_some_data)
    Observable<SomeData> getSomeData();
}



// clickStream created by onClick event
// No.1
clickStream
    .flatMap(e -> apiService.getSomeData())
    .subscribe(
        success -> Log.d("tag", "success"),
        error -> Log.d("tag", "error"),
        () -> Log.d("tag", "complete"))

第二,我尝试了下面的。(使用onErrorResumeNext),但取消了订阅。

(未调用onError,但调用OnComplete。因此已取消订阅)

// No.2
clickStream
    .flatMap(e -> apiService.getSomeData())
    .onErrorResumeNext(throwable -> Observable.empty())  // add this line
    .subscribe(
        success -> Log.d("tag", "success"),
        error -> Log.d("tag", "error"),
        () -> Log.d("tag", "complete"))

第三,我试了下面。(带重试)

// No.3
clickStream
    .flatMap(e -> apiService.getSomeData())
    .retry(5)                                            // add this line
    .subscribe(
        success -> Log.d("tag", "success"),
        error -> Log.d("tag", "error"),
        () -> Log.d("tag", "complete"))

这比第一好。但没有刻录。

我想使刷新按钮,工作后错误。

我想知道

    null

对不起,我的英语太差了。

共有1个答案

阎功
2023-03-14

你的第2号相当接近--试试这个:

clickStream
.flatMap(e -> apiService.getSomeData()
    .onErrorResumeNext(throwable -> Observable.empty()))  // add this line
.subscribe(
    success -> Log.d("tag", "success"),
    error -> Log.d("tag", "error"),
    () -> Log.d("tag", "complete"))

注意,我只是移动了一个括号,这样OnErrorResumeNext现在就会在每个错误之后调用,并且是“内部”可观察的一部分。

 类似资料:
  • 想象一下MVP模式中的情况,演示者订阅了一个返回观察者的服务: 现在,类从视图中调用方法,比如: 现在,在我的单元测试中,我想验证在非错误情况下调用方法时,是否调用了视图的方法。 问题是: 有没有干净的方法可以做到这一点? 背景: 我使用mockito来验证交互,当然还有更多 Dagger正在注入整个演示者,除了 我试过什么: 注入订阅服务器并在测试中模拟它。看起来有点脏,因为如果我想改变演示者与

  • 我是RxJava的新手。我有一个,用于下载图像URL列表并将其转换为位图的简单网络操作。 在活动的上,我取消订阅可观察到的以避免内存泄漏。 我能看到的是,如果我在图像下载过程中退出活动,后台任务也会被终止。我只想继续做背景工作,即使我已经取消了《观察家》的订阅。有可能吗?

  • 我只是把我的脚趾头浸入RxJava中,所以请温柔点:)到今天为止,我对异步任务还可以,但它变得越来越复杂,我想我终于偶然发现了一个需求,实际上我很难用简单的异步任务来满足这个需求。这是我的用例: 1)我有一个方法(我们称之为),它需要在会话中运行一次。如果以前运行过,它会返回缓存的响应。否则,它会执行一个网络调用,然后根据结果执行另一个。这两个网络任务都使用OkHttp运行,并且是同步的。方法本身

  • 我将在一个Android应用程序中用替换模式。我有事件来提醒任何感兴趣的方面我的缓存中的数据更新单例。任何时候调用web服务,都将更新数据,并通过发布的事件向订阅者发出警报。 我在RxJava中使用设置了与此类似的内容。观察者从subject获得单个事件,但随后获得事件并取消订阅。这在UI第一次加载时起作用,但当需要刷新数据时,不会通知订阅者。如何告诉这些继续监听下一个事件?

  • 我之所以要这样做,是因为我们的服务在部署时配置订阅规则,并且具有消息代理的服务可能会在具有订阅客户端的服务更改规则集和新的业务逻辑之前部署该服务,该服务会发送一组新的消息。我们不希望丢失在部署期间发送的消息,并在新服务退出时处理它们。 干杯。

  • 在这篇文章之后,我正在使用带有RxJava/RxKotlin Flowable的Room。我让它运行,但在带有3个片段的ViewPager中使用它存在问题。 我将向您介绍我的代码: 我有一个带有选项卡布局和三个片段(A、B和收藏夹)的视图分页器。前两个片段包含可以添加到收藏夹的数据列表。 在最喜欢的片段中,我使用Flowable来监听A和B所做的更改并相应地更新列表。但是,当一个项目在A和B中成为