1

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

我想retryWhen()在 Intent 中添加类似的东西,当然这只是由onError().

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

4

1 回答 1

2

实际上,我自己使用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);
}

另请查看Github上 @sockeqwe 的答案

于 2017-02-20T15:10:53.053 回答