Mosby MVI - 如何重试意图?

时间:2017-02-20 15:10:53

标签: android mosby

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

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

是否有一种简单的方法可以添加这种行为?

1 个答案:

答案 0 :(得分: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()仅在所有Observable在订阅后发出第一个项目时才会发出项目。这就是为什么我需要在Mosby完成订阅后初始化重试。

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

请在Github

查看来自@sockeqwe的答案