Okhttp单例 二次封装
2018-04-04 11:26
344 查看
首先,导入依赖:
然后请看代码:
compile 'com.squareup.okhttp3:okhttp:3.10.0'
然后请看代码:
package com.example.zym.shopping.utils; import android.os.Environment; import android.os.Handler; import android.util.Log; import com.google.gson.Gson; import java.io.File; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.logging.LogRecord; import okhttp3.Cache; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; /** * Created by eric on 2018/3/31. */ public class HttpUtils { private static final String TAG = "HttpUtils"; private static volatile HttpUtils instance; public Handler handler = new Handler(); private OkHttpClient client; private Interceptor getAppInterceptor(){ Interceptor interceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.e("++++++++++","拦截前"); //---------请求之前------------ Response response = chain.proceed(request); Log.e("++++++++++","拦截后"); //---------请求之后------------ return response; } }; return interceptor; } private HttpUtils() { File file = new File(Environment.getExternalStorageDirectory(), "cache11"); client = new OkHttpClient().newBuilder() .readTimeout(3000, TimeUnit.SECONDS) //设置读取超时时间 .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间 .addInterceptor(getAppInterceptor())//Application拦截器 .cache(new Cache(file, 10 * 1024)) .build(); } public static HttpUtils getInstance() { if (instance == null) { synchronized (HttpUtils.class) { if(null == instance) { instance = new HttpUtils(); } } } return instance; } public void doGet(String url, final Class clazz, final NetCallBack netCallBack) { // 2. 创建一个请求对象 Request request = new Request.Builder() .get() .url(url) .build(); // 3. 创建出一个Call对象 Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { netCallBack.onFailure(e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { // 注意:response.body()只能用一次 // Log.i(TAG, "onResponse: "+response.body().string()); String result = response.body().string(); Gson gson = new Gson(); final Object o = gson.fromJson(result, clazz); handler.post(new Runnable() { @Override public void run() { netCallBack.onSuccess(o); } }); // Log.i(TAG, "onResponse: "+result); } }); } public void doPost(String url, final Class clazz, Map<String,String> parms, final NetCallBack netCallBack){ //不是FormBody,而是一个Builder FormBody.Builder body = new FormBody.Builder(); //key value for (String key:parms.keySet()){ //value的值 body.add(key,parms.get(key)); } Request request = new Request.Builder() .url(url) .post(body.build()) .build(); // 3. 创建出一个Call对象 Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { netCallBack.onFailure(e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { // 注意:response.body()只能用一次 // Log.i(TAG, "onResponse: "+response.body().string()); String result = response.body().string(); Gson gson = new Gson(); final Object o = gson.fromJson(result, clazz); handler.post(new Runnable() { @Override public void run() { netCallBack.onSuccess(o); } }); } }); } public interface NetCallBack { void onSuccess(Object o); void onFailure(Exception e); } }
相关文章推荐
- okhttp的二次封装
- OkHttp的基本使用以及二次封装
- okhttp的二次封装(基本使用)
- Okhttp二次封装
- RxJava2+Retrofit2+okHttp的二次封装
- OKhttp二次封装工具类
- okHttp二次封装
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- Okhttp框架的二次封装,post json格式的参数
- 对okhttp的二次封装
- okhttp简单的二次封装
- okhttp的二次封装加入泛型
- Okhttp二次封装
- 二次封装oKHTTP
- OkHttp的二次封装
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- Android——MVP架构OkHttp的二次封装以及RecyclerView的使用
- 二次封装OKHttp网络框架(1)
- OKHttp简单二次封装
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据