2017-02-20 6 views
1

私はInteractorでRetrofit2を使用して、安らかなAPIで簡単なCRUD操作を実行するデモアプリケーションにMosby MVIライブラリを使用しています。 Retrofitがエラーで応答したときにThrowableを含むサンプルAppと非常によく似たViewStateを構築しました。この場合、render()機能は再試行ボタン付きのエラー画面を表示します。 再試行ボタンをクリックすると、失敗したインテントの最後のアイテムを再発行します。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); 
    } 
} 

注意すべき点が1つあります。 combineLatest()は、すべてのObservableがサブスクライブした後、最初のアイテムを発行したときにのみアイテムを送出します。なぜモスビーが購読をした後に再試行を初期化する必要があるのですか?

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

Github

で@sockeqweからの回答をご覧ください
関連する問題