我正在为一个演示应用程序使用Mosby MVI库,该应用程序在我的交互器中使用Retrofit2在Restful API上执行简单的CRUD操作。我构建了与示例应用程序非常相似的ViewStates,当Retrofit响应错误时包含Throwable。在这种情况下,render()函数会显示一个带有重试按钮的错误屏幕。当点击重试按钮时,我想为失败的意图重新发射最后一项。
我想在Intent中添加一些像retryWhen()这样的东西,当然这只由onError()触发。
有没有一种简单的方法来添加这种行为?
发布于 2017-02-20 23:10:53
实际上,我自己使用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()仅当所有可观察对象在订阅后都发出第一个项时才发出项。这就是为什么我需要在Mosby完成订阅后初始化重试。
@Override
protected void onStart() {
super.onStart();
retrySubject.onNext(true);
}也可以在Github上查看@sockeqwe的答案
https://stackoverflow.com/questions/42348038
复制相似问题