最近在网上看到了很多带有网络缓存的封装库 ,于是心血来潮打算自己也撸一串代码助助兴
现在最火的网络请求就是retrofit'和rxjava连用了 于是我就按照项求撸了一段带有网络缓存的retrofit.
//就是这么轻松加愉快 水友们不要客气直接拿去享用就行 再也不用担心断网看不到数据了 //废话不多说直接上代码
package com.example.administrator.myexample; 现在最火的网络请求就是retrofit'和rxjava连用了 于是我就按照项求撸了一段带有网络缓存的retrofit. // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`---'\____ // . ' \\| |// `. // / \\||| : |||// \ // / _||||| -:- |||||- \ // | | \\\ - /// | | // | \_| ''\---/'' | | // \ .-\__ `-` ___/-. / // ___`. .' /--.--\ `. . __ // ."" '< `.___\_<|>_/___.' >'"". // | | : `- \`.;`\ _ /`;.`/ - ` : | | // \ \ `-. \_ __\ /__ _/ .-` / / // ======`-.____`-.___\_____/___.-`____.-'====== // `=---=' // // ............................................. // 佛祖镇楼 BUG辟易 // 佛曰: // 写字楼里写字间,写字间里程序员; // 程序人员写程序,又拿程序换酒钱。 // 酒醒只在网上坐,酒醉还来网下眠; // 酒醉酒醒日复日,网上网下年复年。 // 但愿老死电脑间,不愿鞠躬老板前; // 奔驰宝马贵者趣,公交自行程序员。 // 别人笑我忒疯癫,我笑自己命太贱; // 不见满街漂亮妹,哪个归得程序员? import android.util.Log; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.CacheControl; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * 添加了网络缓存retrofit */ public class Api { public static final String BASE_URL = "http://app.vmoiver.com"; public static final String TAG = Api.class.getSimpleName(); private static ApiService apiService; public static ApiService getApiService() { if (apiService == null) { synchronized (Api.class) { if (apiService == null) { initApiService(); } } } return apiService; } private static void initApiService() { File httpCacheDirectory = new File(MyApp.getContext().getExternalCacheDir(), "responses"); Cache cache = new Cache(httpCacheDirectory, 50 * 1024 * 1024); //缓存路径 //String str=mFile.getAbsolutePath().toString(); // Log.e("Caches",str); //拦截器 Interceptor mRewriteCacheControlInterceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!NetWorkUtils.isNetworkReachable(MyApp.getContext())) { request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response originalResponse = chain.proceed(request); if (!NetWorkUtils.isNetworkReachable(MyApp.getContext())) { String cacheControl = request.cacheControl().toString(); return originalResponse.newBuilder() .removeHeader("Pragma") .header("Cache-Control", cacheControl) .build(); } else { return originalResponse.newBuilder() .removeHeader("Pragma") .header("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 24 * 2) .build(); } } }; OkHttpClient okHttpClient = new OkHttpClient.Builder() .cache(cache) .addInterceptor(mRewriteCacheControlInterceptor) .addNetworkInterceptor(mRewriteCacheControlInterceptor) .retryOnConnectionFailure(true) .connectTimeout(15, TimeUnit.SECONDS) .build(); Retrofit retrofit = new Retrofit.Builder() .client(okHttpClient) .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); apiService = retrofit.create(ApiService.class); } } //就是这么轻松加愉快 水友们不要客气直接拿去享用就行 再也不用担心断网看不到数据了