Retorfit
+を使用してネットワークを作成してRxJava2
おり、応答を 30 秒間キャッシュしたいと考えています。30 秒間隔の後に行われた呼び出しは、サーバーから最新の結果を取得する必要があります。オペレーターを使用してこれを実行しようとしましReplay
たが、サブスクライブを呼び出すたびにネットワーク呼び出しが行われます。私は RxJava の専門家ではないので、Replay
そのようなキャッシングに使用するという私の理解は間違っているかもしれません。
public Observable<Name> getName() {
return retrofitBuilder.getName()
.subscribeOn(Schedulers.io())
.replay(30, TimeUnit.SECONDS,Schedulers.io())
.autoConnect();
}
上記のコードを次のように呼び出しています。
service.getName()
.subscribe(new Consumer<Name>()
{
@Override
public void accept(Name name) throws Exception
{
Log.d("getName", "Name: " + name.toString());
}
}
, new Consumer<Throwable>()
{
@Override
public void accept(Throwable throwable) throws Exception
{
Log.d("getName", throwable.getMessage());
}
});
更新:質問を明確に説明していない場合は、お詫び申し上げます。私が望むのはHttpClient
、キャッシュ戦略をそれを介して行われるすべてのリクエストに適用するレベルでキャッシュするのではなく、特定のリクエストでキャッシュすることです。最後に、必要に応じて、要求ごとに異なるキャッシュ有効期限を定義したいと思います。すべてのリクエストが短期間キャッシュする必要があるわけではありません。それだけでいいのだろうかと思いました。
これであなたの助けに感謝します。