网络拦截器 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); }}
阅读全文
0 0
- 网络拦截器 okhttp工具类以及imageloder
- Okhttp网络拦截器
- okhttp网络拦截器
- okhttp拦截器网络请求
- OkHttp封装+网络拦截器
- ImageLoder工具类
- ImageLoder工具类
- ImageLoder封装工具类..
- OkHttp网络连接封装工具类以及json转换类
- 比较全的 OkHttp封装类+网络拦截器
- OKHTTP的拦截器以及https访问
- Okhttp简单封装加网络拦截器
- Android Okhttp的网络拦截器
- Retrofit+okhttp拦截器获取网络数据
- OkHttp:拦截器之网络请求Log
- Android----OKHttp网络请求-拦截器
- Android OkHttp网络请求拦截器
- OkHttp网络解析工具类
- 56 “伪”积分
- 微信功能大全
- Utils2
- JAVA解析JSON数据
- 解决 Error:All flavors must now belong to a named flavor dimension
- 网络拦截器 okhttp工具类以及imageloder
- 配舱报表存储过程(3天编程时间)
- MySql免安装版安装配置,附MySQL服务无法启动解决方案
- Android Studio导入工程报错[Plugin with id 'com.android.application' not found]
- Linux关闭防火墙
- Swift 求1! + 2! + 3! + 4!的和要求:使用嵌套定义函数实现
- Java 集合深入理解(5):AbstractCollection
- 第八周项目三
- jquery 联合选择器,相对选择和层级选择器__多类交集选择器,多属性选择器