OkHttp(拦截器,单例模式,get,post)
2019-01-20 11:21
190 查看
4000
package com.bw.week3_practice.network;
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 okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
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(); } //单例okhttp 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()只能用一次 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 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()只能用一次 String result = response.body().string(); Gson gson = new Gson(); final Object oj = gson.fromJson(result, clazz); handler.post(new Runnable() { @Override public void run() { netCallBack.onSuccess(oj); } }); } }); } public interface NetCallBack { void onSuccess(Object oj); void onFailure(Exception e); }
}
相关文章推荐
- OkHttp(get,post,拦截器,上传,下载)
- Android 单例模式 封装 Okhttp + RxJava 网络请求(get和post)
- OKHttp使用拦截器(Interceptor)POST与GET方法,统一封装传公共参数
- OkHttp的get,post请求,拦截器
- OkHttp学习(1)-->>同步和异步(get、post键值对、post带map、请求头体封装json)
- Post/重定向/Get模式
- okhttp网络框架的使用get和post请求
- 解决问题:在使用springmvc的web.xml配置乱码拦截器之后接收的get或者post请求中文还是乱码
- 【Angular】angular-HttpClient 与服务器通讯 Get Post Put Delete Http 拦截器 请求讲解
- ok请求封装get , post 加 拦截器
- 用okhttp请求 get同步 get异步 post异步
- Android好用的okhttp网络封装(get,post,上传,下载)
- okHttp post&get请求
- OkHttp请求封装(Get Post Delete Put请求)异步和同步(请求头)请求的封装
- okhttp get post 使用源代码
- Ajax 的 GET 和 POST 模式
- AJAX使用get与post模式的区别分析
- 【Angular】angular-HttpClient 与服务器通讯 Get Post Put Delete Http 拦截器 请求讲解
- 【Angular】angular-HttpClient 与服务器通讯 Get Post Put Delete Http 拦截器 请求讲解
- Okhttp 异步get post 请求