我使用Mosby MVI库作为演示应用程序,在我的Interactor中使用Retrofit2对Restful API执行简单的CRUD操作。
我构建的ViewStates与示例App非常相似,当Retrofit响应错误时包含Throwable。在这种情况下,render()
功能会显示带有重试按钮的错误屏幕。
单击重试按钮时,我想重新发出失败的Intent的最后一项。
我想在Intent中添加类似retryWhen()
的内容,当然这只是由onError()
触发。
是否有一种简单的方法可以添加这种行为?
答案 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的答案