网络拦截器 okhttp工具类以及imageloder

来源:互联网 发布:lol观战软件 编辑:程序博客网 时间:2024/06/06 18:23

MyApplication类

import android.app.Application;import android.graphics.Bitmap;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.utils.StorageUtils;import java.io.File;import code.xp.okhttp3.R;public class MyApplication extends Application {    private static MyApplication instance;    @Override    public void onCreate() {        super.onCreate();        instance=this;        initLoader();    }    public static MyApplication getInstance()    {        return instance;    }    public void initLoader()    {        File cacheDir = StorageUtils.getCacheDirectory(getApplicationContext());        //创建默认的ImageLoader配置参数        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())            .threadPriority(Thread.NORM_PRIORITY-2)            .memoryCacheExtraOptions(480, 800)            .tasksProcessingOrder(QueueProcessingType.FIFO) // default            .denyCacheImageMultipleSizesInMemory()                /*内存缓存*/            .memoryCache(new LruMemoryCache(2 * 1024 * 1024))            .memoryCacheSize(2 * 1024 * 1024)            .memoryCacheSizePercentage(13) // default                /*磁盘缓存*/            .diskCache(new UnlimitedDiscCache(cacheDir)) // default            .diskCacheSize(50 * 1024 * 1024)            .diskCacheFileCount(100)            .writeDebugLogs()            .build();        //初始化ImageLoader        ImageLoader.getInstance().init(config);    }    public static DisplayImageOptions buildDisplayOption()    {        //显示图片的配置        DisplayImageOptions options = new DisplayImageOptions.Builder()                .cacheInMemory(true)            //内存缓存                .cacheOnDisk(true)              //磁盘缓存                .bitmapConfig(Bitmap.Config.RGB_565)                .showImageOnFail(R.drawable.ic_launcher)  //失败时显示图片                .showImageOnLoading(R.drawable.ic_launcher)   //加载中显示图片                .showImageForEmptyUri(R.drawable.ic_launcher) //空的URI时显示图片                .showStubImage(R.drawable.ic_launcher)        //默认的图片                .build();        return options;    }}

抽象类

package code.xp.okHttp3.callback;import android.os.Handler;import android.util.Log;import com.google.gson.Gson;import java.io.IOException;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import code.xp.okHttp3.utils.OkHttp3Utils;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public abstract class GsonObjectCallback<T> implements Callback {    private Handler handler = OkHttp3Utils.getHandler();    public abstract void onUi(T t);    public abstract void onFailed(Call call, IOException e);    @Override    public void onFailure(final Call call, final IOException e) {        handler.post(new Runnable() {            @Override            public void run() {                onFailed(call, e);            }        });    }    @Override    public void onResponse(Call call, Response response) throws IOException {        final String json = response.body().string();        Class<T> cls = null;        Class clz = this.getClass();        ParameterizedType type = (ParameterizedType) clz.getGenericSuperclass();        Type[] types = type.getActualTypeArguments();        cls = (Class<T>) types[0];        Gson gson = new Gson();        final T t = gson.fromJson(json, cls);        handler.post(new Runnable() {            @Override            public void run() {                Log.i("yxp",json+"");                onUi(t);            }        });    }}

网络超时

package code.xp.okHttp3.interceptor;import java.io.IOException;import code.xp.okHttp3.application.MyApplication;import code.xp.okHttp3.utils.NetWorkUtils;import okhttp3.CacheControl;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;public class CacheInterceptor implements Interceptor {    @Override    public Response intercept(Chain chain) throws IOException {        // 有网络时 设置缓存超时时间1个小时        int maxAge = 60 * 60;        // 无网络时,设置超时为1天        int maxStale = 60 * 60 * 24;        Request request = chain.request();        if (NetWorkUtils.isNetWorkAvailable(MyApplication.getInstance())) {            //有网络时只从网络获取            request = request.newBuilder().cacheControl(CacheControl.FORCE_NETWORK).build();        } else {            //无网络时只从缓存中读取            request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();        }        Response response = chain.proceed(request);        if (NetWorkUtils.isNetWorkAvailable(MyApplication.getInstance())) {            response = response.newBuilder()                    .removeHeader("Pragma")                    .header("Cache-Control", "public, max-age=" + maxAge)                    .build();        } else {            response = response.newBuilder()                    .removeHeader("Pragma")                    .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)                    .build();        }        return response;    }}

网络拦截器

package code.xp.okHttp3.interceptor;import android.os.Build;import java.io.IOException;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;public class LoggingInterceptor implements Interceptor {    private static final String UA = "User-Agent";    @Override    public Response intercept(Chain chain) throws IOException {        Request request = chain.request()                .newBuilder()                .addHeader(UA, makeUA())                .build();        return chain.proceed(request);    }    private String makeUA() {        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;    }}

网络判断

package code.xp.okHttp3.utils;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;public class NetWorkUtils {    //判断网络是否连接    public static boolean isNetWorkAvailable(Context context) {        //网络连接管理器        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);        //网络信息        NetworkInfo info = connectivityManager.getActiveNetworkInfo();        if (info != null) {            return true;        }        return false;    }}

OkHttp3Utils 工具类

package code.xp.okHttp3.utils;import android.os.Environment;import android.os.Handler;import java.io.File;import java.util.Map;import java.util.concurrent.TimeUnit;import code.xp.okHttp3.interceptor.CacheInterceptor;import code.xp.okHttp3.interceptor.LoggingInterceptor;import okhttp3.Cache;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;//单例模式来实现工具类public class OkHttp3Utils {    private static OkHttpClient okHttpClient;    private static Handler mHandler = null;    //单例模式    private OkHttp3Utils(){}    public static OkHttpClient getInstance()    {        if(okHttpClient==null)        {            synchronized (OkHttp3Utils.class)            {                //缓存的目录                File sd_cache=new File(Environment.getExternalStorageDirectory(),"ok_cache");                //缓存存储的大小                int cacheSize=1024*1024*10;                //OkHttp3拦截器   LoggingInterceptor为自定义的类                LoggingInterceptor interceptor=new LoggingInterceptor();                okHttpClient=new OkHttpClient.Builder()                        .addInterceptor(interceptor)                        .writeTimeout(30, TimeUnit.SECONDS)                        .readTimeout(30,TimeUnit.SECONDS)                        .connectTimeout(60,TimeUnit.SECONDS)                        .cache(new Cache(sd_cache,cacheSize))                        .addNetworkInterceptor(new CacheInterceptor())                        .build();            }        }        return okHttpClient;    }    public synchronized static Handler getHandler() {        if (mHandler == null) {            mHandler = new Handler();        }        return mHandler;    }    //get请求    public static void doGet(String url, Callback callback)    {        OkHttpClient okHttpClient=getInstance();        //创建Request        Request.Builder builder=new Request.Builder();        builder.url(url);        Request request=builder.build();        Call call=okHttpClient.newCall(request);        call.enqueue(callback);    }    //post请求    public static void doPost(String url,Map<String, String> params, Callback callback)    {        OkHttpClient okHttpClient=getInstance();        FormBody.Builder builder=new FormBody.Builder();        for(String key:params.keySet())        {            builder.add(key,params.get(key));        }        Request.Builder reqbuilder=new Request.Builder();        reqbuilder.url(url);        reqbuilder.post(builder.build());        Request request=reqbuilder.build();        Call call=okHttpClient.newCall(request);        call.enqueue(callback);    }}