1.依賴
implementation ‘com.squareup.okhttp3:okhttp:3.12.0’
implementation ‘com.orhanobut:logger:2.1.1’
2.Okhttputil
public class OkUtil {
private static Gson gson = new Gson();
private static final String MEDIA_TYPE=“application/json;charset=utf-8”;
private static final String METHOD_GET=“GET”;
private static final String METHOD_POST=“POST”;
private static final String METHOD_PUT=“PUT”;
private static final String METHOD_DELETE=“DELETE”;
private static OkHttpClient okHttpClient;
private OkUtil(){}
public static void init(Map headers){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.readTimeout(3000,TimeUnit.MILLISECONDS);
builder.writeTimeout(3000,TimeUnit.MILLISECONDS);
builder.connectTimeout(5000,TimeUnit.MILLISECONDS);
builder.addInterceptor(new OKHeaderInterceptor(headers));//添加請求頭
builder.addInterceptor(new OkLogInterceptor());//添加日誌攔截器
builder.retryOnConnectionFailure(false);
okHttpClient = builder.build();
}
public static Request createRequest(String url,String method,Map map){
FormBody formBody =null;
if (map!=null){
FormBody.Builder builder = new FormBody.Builder();
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
String key = (String) iterator.next();
String value = (String) map.get(key);
builder.add(key,value);
}
formBody = builder.build();
}
Request.Builder builder = new Request.Builder().url(url);
Request request=null;
switch (method){
case METHOD_GET:
request = builder.build();
break;
case METHOD_POST:
request =builder.post(formBody).build();
break;
case METHOD_PUT:
if (formBody!=null){
request=builder.put(formBody).build();
}
break;
case METHOD_DELETE:
if (formBody!=null){
request=builder.delete(formBody).build();
}else {
request=builder.delete().build();
}
break;
}
return request;
}
public static void enqueuePost(String url, Map map, Callback callback){
Request request = createRequest(url,METHOD_POST,map);
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
public static void enqueueGet(String url,Callback callback){
Request request = createRequest(url,METHOD_GET,null);
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
public static Response excutePost(String url,Map map){
Request request =createRequest(url,METHOD_POST,map);
Call call = okHttpClient.newCall(request);
Response response=null;
try {
response=call.execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
public static Response excuteGet(String url) throws IOException {
Request request=createRequest(url,METHOD_GET,null);
Call call = okHttpClient.newCall(request);
Response response=null;
response=call.execute();
return response;
}
}
3.OKHeaderInterceptor
/**
-
請求攔截器
*/
public class OKHeaderInterceptor implements Interceptor {
private Map<String,String> headers;public OKHeaderInterceptor(Map<String, String> headers) {
if (headers!=null){
this.headers = headers;
}
}@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
//添加請求頭
builder.addHeader(“token”,“this is token”);
builder.addHeader(“version”,“version1.0”);
builder.addHeader(“platform”,“android”);
request=builder.build();
return chain.proceed(request);
}
}
4.OkLogInterceptor
/**
-
日誌攔截器
*/
public class OkLogInterceptor implements Interceptor {@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String method = request.method();
HttpUrl url = request.url();
LogUtil.d(“本次請求”,“ulr:”+url.toString()+“method:”+method);
Headers headers = request.headers();
Set names = headers.names();
Iterator iterator = names.iterator();
while (iterator.hasNext()){
String next = iterator.next();
String value = headers.get(next);
LogUtil.d(next+":"+value);
}
return chain.proceed(request);
}
}
5.LogUtil
public class LogUtil {
public static void init(){
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(false)
.methodCount(0)
.methodOffset(7)
.logStrategy(null)
.tag(“baway”)
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
}
public static void json(String json){
if (TextUtils.isEmpty(json)){
Logger.json(json);
}
}
public static void json(String tag,String json){
if (!TextUtils.isEmpty(json)){
Logger.t(tag).json(json);
}
}
public static void d(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.d(msg);
}
}
public static void d(String tag,String msg){
if (!TextUtils.isEmpty(msg)){
Logger.t(tag).d(msg);
}
}
public static void e(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.e(msg);
}
}
public static void w(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.w(msg);
}
}
public static void v(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.v(msg);
}
}
public static void i(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.i(msg);
}
}
}
6.App初始化
public class App extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context=this;
LogUtil.init();
Fresco.initialize(this);
initHttpHeader();
}
private void initHttpHeader() {
HashMap<String,String> map = new HashMap<>();
map.put("token","this is token");
map.put("version","version1.0");
map.put("platform","android");
OkUtil.init(map);
}
}