2017-02-20 81 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

答案