package bwie.mylibrary;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
/**
* Created by zjj on 2016/11/3.
*/
public class OkHttpUtils {
private static OkHttpClient mClient;
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//构造方法(无参)1.将构造函数私有化
private OkHttpUtils() {
}
//单例模式:3.提供一个方法可以获取到改对象
public static OkHttpClient getOkHttpClient() {
//判断是否为空
if (mClient == null) {
//日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//实例化OkHttpClient 2.在类中创建一个本类的实例
//对象是方法调用时才初始化,
mClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
// .addInterceptor(new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// Request request = chain.request();
// request = request.newBuilder()
// .addHeader("key","value")
// .build();
// return chain.proceed(request);
// }
// })
.build();
}
return mClient;
}
/**
* 异步post 参数为对象
*
* @param url
* @param obj
* @param callback
*/
public static void post(String url, Object obj, Callback callback) {
post(url, new Gson().toJson(obj), callback);
}
/**
* 异步post 参数为json
*
* @param url
* @param json
* @param callback
*/
public static void post(String url, String json, Callback callback) {
//创建RequestBody create()方法 参数一:MediaType contenttype 参数二:String content
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
getOkHttpClient().newCall(request).enqueue(callback);
}
/**
* 异步post 参数为Map
*
* @param url
* @param map
* @param callback
*/
public static void post(String url, Map<String, String> map, Callback callback) {
//获取FormBody.Builder对象
FormBody.Builder builder = new FormBody.Builder();
//添加要传递的参数
for (String key : map.keySet())
builder.add(key, map.get(key));
//获取RequestBody
RequestBody body = builder.build();
//获取Request
Request request = new Request.Builder()
.url(url)//网址
.post(body)//参数
.build();
//获取Call对象,调enqueue(callback)方法
getOkHttpClient().newCall(request).enqueue(callback);
}
/**
* 异步get enqueue(callback)
*
* @param url
* @param callback
*/
public static void get(String url, Callback callback) {
//创建Request对象
Request request = new Request.Builder()
.url(url)
.build();
//Call对象的enqueue(callback)方法
getOkHttpClient().newCall(request).enqueue(callback);
}
/**
* 同步get execute()
*
* @param url
* @return
*/
public static String get(String url) {
//创建Request对象
Request request = new Request.Builder()
.url(url)
.build();
try {
//创建Call对象
Call call = getOkHttpClient().newCall(request);
//获得Response对象Call对象的execute()方法
Response response = call.execute();
//如果响应成功,将响应结果返回出去
if (response.isSuccessful()) {
return response.body().string();
} else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Okhttp 工具类
最新推荐文章于 2022-06-05 16:08:09 发布