【问题标题】:Mosby MVI - How to retry intents?Mosby MVI - 如何重试意图?
【发布时间】:2017-02-20 15:10:53
【问题描述】:

我正在将 Mosby MVI 库用于演示应用程序,该应用程序使用我的 Interactor 中的 Retrofit2 对 Restful API 执行简单的 CRUD 操作。 我构建的 ViewStates 与示例应用程序中的非常相似,当 Retrofit 响应错误时包含 Throwable。在这种情况下,render() 函数会显示带有重试按钮的错误屏幕。 单击重试按钮时,我想重新发出失败的 Intent 的最后一项。

我想在 Intent 中添加类似 retryWhen() 的内容,当然这只能由 onError() 触发。

有没有添加这种行为的简单方法?

【问题讨论】:

    标签: android mosby


    【解决方案1】:

    实际上,我自己使用combineLatest() 解决了这个问题。 retrySubject 不需要知道前一个意图的内容。

    class MyViewActivity extends MviActivity<MyView, MyViewState> implements MyView {
      PublishSubject<Boolean> retrySubject =  ... ; // fires on retry Button click
      ...
    
      @Override
      public Observable<String> searchIntent(){
        Observable<String> searchObservable =   RxSearchView.queryTextChanges(searchView);
        return Observable.combineLatest(searchObservable,retrySubject(searchString, retryClicked) -> searchString);
      }
    }
    

    有一点需要注意。 combineLatest() 仅在所有 Observables 在订阅它们后发出第一个项目时才发出项目。这就是为什么我需要在 Mosby 完成订阅后初始化重试。

    @Override
      protected void onStart() {
        super.onStart();
        retrySubject.onNext(true);
    }
    

    也请查看@sockeqwe 的答案Github

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多