Retorfit
+ RxJava2
を使用してネットワークを作成していて、30秒間応答をキャッシュします。 30秒後に呼び出されたコールは、サーバーから最新の結果を取得する必要があります。私はReplay
オペレータを使ってこれを試みましたが、私が購読を呼び出すたびにネットワークコールを作ります。私はRxJavaの専門家ではないので、そのようなキャッシングにReplay
を使用することについての私の理解は間違っています。RxJavaを使用した一定期間のネットワークコールのキャッシュ
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());
}
});
UPDATE:私は明らかに私の質問を説明していない場合は私の謝罪。私が望むのは、それを介して行われているすべての要求にキャッシュ戦略を適用するHttpClient
レベルにキャッシュするのではなく、特定の要求をキャッシュすることです。最後に、必要に応じて異なるリクエストに対して異なるキャッシュ有効期限を定義したいと思います。私のすべてのリクエストがキャッシュを少しずつ必要とするわけではありません。私はちょうどそれをすることができるかどうか疑問に思っていた。
あなたのご協力をお待ちしております。
'service.getName()'を呼び出すたびに新しい 'Observable'が返されます。その 'replay'演算子、およびそれを好む他のものは、単一のObservableでさまざまな種類のマルチキャスティングを可能にすることを意図しています。ほとんどの場合、 'service.getName()'メソッドの後ろにキャッシングを実装したいと思うでしょう。それは、それを実行するために作成するObservableの数にかかわらずキャッシング機能を提供します。これは、Httpクライアント層、「Cache-Control」などの方法でキャッシュを実装することを意味します。 – drhr
1つの解決策は、そのコールに対してのみ異なるokhttpクライアント/インターセプタを使用することです。 – parkgrrr