Czy istnieje sposób na wykrycie, czy odpowiedź Retrofit pochodzi ze skonfigurowanej pamięci podręcznej OkHttp, czy jest odpowiedzią na żywo?Wykryj, czy odpowiedź OkHttp pochodzi z pamięci podręcznej (z funkcją Retrofit).
definicjaKlient:
Cache cache = new Cache(getCacheDirectory(context), 1024 * 1024 * 10);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cache(cache)
.build();
definicja API
@GET("/object")
Observable<Result<SomeObject>> getSomeObject();
Przykład połączenie:
RetroApi retroApi = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(RetroApi.class);
result = retroApi.getSomeObject().subscribe((Result<SomeObject> someObjectResult) -> {
isFromCache(someObjectResult); // ???
});
Czy ten cytat pochodzi z rozmowy lub z innego źródła online? Jeśli tak, czy mógłbyś podać link? – user2340612
Właściwie lepiej jest sprawdzić 'result.response(). Raw(). CacheResponse()! = Null'. Jeśli klient ponownie sprawdzi buforowaną odpowiedź i otrzyma numer 304, zarówno 'networkResponse()' oraz 'cacheResponse()' będą miały wartość inną niż null. – apottere
Tak, w zależności od semantyki i tego, jakie jest pożądane zachowanie aplikacji. –