2017-02-20 79 views
1

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

我想添加一些类似retryWhen()的意图,这当然只是由onError()触发。

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

回答

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()仅在所有观察者订阅它们后发出第一个项目时才发射项目。这就是为什么我需要在Mosby订阅之后初始化重试。

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

还请查看从@sockeqwe在Github

答案