私は4つのタブを持つボトムバーを持っています。各タブはFragment
です。ユーザーが別のFragment
に移動したときにネットワークコールを停止したいので、Observable
コールをCompositeSubscription
に追加し、onDestroyView()
に登録を解除します。次回ユーザーが画面に入ると、すべてのネットワークコールが失敗します(私は退会しているので)ので、再度購読します。オブザーバブルに再登録する方法
私はこれをどうしたらよいか分かりません。どういうわけか、onResume()/onViewAttached()
がフラグメントに対して呼び出されたときに再購読する必要があります。私は同様の質問をチェックして、その答えがcache
とreplay
演算子を言及したが、私だけの間、私は、彼らはまた、以前に放出されたアイテムを取得するために求めていた原因それはケースだとは思わない:私はRxJava 1
Editを使用しています任意のネットワークコールを再度実行できるようにしたい。
これは私がネットワーク呼び出しのために観察可能に加入してる方法です:
subscriptions.add(remoteDataSource.getFeedMore(localDataSource.getFirstStoredId())
.doOnNext(new Action1<FeedItemsRequestDetailsWrapper>() {
@Override
public void call(FeedItemsRequestDetailsWrapper wrapper) {
if (wrapper != null) {
localDataSource.saveFeed(wrapper.getFeedItemList());
localDataSource.saveServerState(wrapper.getFeedRequestDetails());
}
}
})
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.mainThread())
.subscribe(new Action1<FeedItemsRequestDetailsWrapper>() {
@Override
public void call(FeedItemsRequestDetailsWrapper wrapper) {
// call to View to update
}
}));
そして、どのように私は退会:
@Override
public void unsubscribe() {
if (subscriptions != null && subscriptions.hasSubscriptions()) {
subscriptions.unsubscribe();
}
}
例ユースケース:ユーザーは、ユーザーがAクリック、Timeline
画面に入り、ボタンを押すと、ネットワークコールが実行されます(前述のコードのようにPresenterクラスにObservable
としてモデル化されています)。その後、ユーザーはこの画面を終了します( onDestroyView()
が呼び出され、サブスクリプションは登録解除されます)。しばらくしてから、ユーザはTimeline
画面を再度入力し、ボタンをクリックします。
これは私がHTTP FAILED: java.io.IOException: Canceled
を受け取ったときに私が購読を停止したために再購読したいので、エラーなしでネットワークコールを実行できます。
おかげ
'CompositeSubscription'が退会するために' clear'を呼び出しますか?はいの場合は、さらに表示する必要があります。 – masp
私はいくつかのコードで質問を更新しました。 – Mes