改造脱机兑现返回空响应.body() [英] Retrofit Offline cashing returns a null response.body()
本文介绍了改造脱机兑现返回空响应.body()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试了这个链接和这个<一个href ="https://stackoverflow.com/questions/48285099/retrofit-offline-request-and-response">链接以构建脱机改造缓存.
I tried this link and this link to construct an offline Retrofit cache.
问题是,如果我将手机置于飞行模式,则Response.body()始终为空.
The problem is that if I put the phone in Airplane mode, the Response.body() is always null.
这是我的代码:
OkHttpClient client = new OkHttpClient
.Builder()
.cache(new Cache(App.sApp.getCacheDir(), 10 * 1024 * 1024)) // 10 MB
.addInterceptor(new Interceptor() {
@Override public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (App.isNetworkAvailable()) {
request = request.newBuilder().header("Cache-Control", "public, max-age=" + 60).build();
} else {
request = request.newBuilder().header("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 24 * 7).build();
}
return chain.proceed(request);
}
})
.build();
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
final RetrofitServiceInterface service = RetrofitClient.getRetrofitInstance(this).create(RetrofitServiceInterface.class);
Call<List<RetroPhoto>> call = service.getAllPhotos();
call.enqueue(new Callback<List<RetroPhoto>>() {
@Override
public void onResponse(Call<List<RetroPhoto>> call, Response<List<RetroPhoto>> response) {
generateDataList(response.body()); ////HERE!!!!
}
@Override
public void onFailure(Call<List<RetroPhoto>> call, Throwable t) {
Toast.makeText(MainActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
}
});
推荐答案
尝试此代码
int cacheSize = 10 * 1024 * 1024; // 10 MB
Cache cache = new Cache(new File(getApplication().getCacheDir(),"someIdentifier"), cacheSize);
Interceptor offlineCacheInterceptor = new Interceptor() {
@Override
public Response intercept (Chain chain) throws IOException {
Request request = chain.request();
if(!App.isNetworkAvailable()) {
CacheControl cacheControl = new CacheControl.Builder()
.maxStale(30, TimeUnit.DAYS)
.build();
request = request.newBuilder()
.cacheControl(cacheControl)
.build();
}
return chain.proceed( request );
}
};
这篇关于改造脱机兑现返回空响应.body()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文