首先添加okhttp的封装类
import android.os.Handler; import android.os.Looper; import com.bwie.moni.LogInterceptor; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class HttpUtils { private OkHttpClient.Builder client; //超时时间 public static final int TIMEOUT=1000*60; //json请求 public static final MediaType JSON = MediaType .parse("application/json; charset=utf-8"); private Handler handler = new Handler(Looper.getMainLooper()); public HttpUtils() { this.init(); } private void init() { client= new OkHttpClient.Builder().addInterceptor(new LogInterceptor()); //设置超时 client.connectTimeout(TIMEOUT, TimeUnit.SECONDS). writeTimeout(TIMEOUT,TimeUnit.SECONDS).readTimeout(TIMEOUT, TimeUnit.SECONDS) .build(); } /** * post请求 json数据为body * */ public void postJson(String url,String json,final HttpCallBack callBack){ RequestBody body = RequestBody.create(JSON,json); final Request request = new Request.Builder().url(url).post(body).build(); OnStart(callBack); client.build().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { OnError(callBack, e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { onSuccess(callBack, response.body().string()); } else { OnError(callBack, response.message()); } } }); } /** * post请求 map是body * * @param url * @param map * @param callBack */ public void postMap(String url,Map添加拦截器map,final HttpCallBack callBack){ FormBody.Builder builder=new FormBody.Builder(); //遍历map if(map!=null){ for (Map.Entry entry : map.entrySet()){ builder.add(entry.getKey(), entry.getValue().toString()); } } RequestBody body = builder.build(); Request request = new Request.Builder().url(url).post(body).build(); OnStart(callBack); client.build().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { OnError(callBack,e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ onSuccess(callBack,response.body().string()); }else{ OnError(callBack, response.message()); } } }); } /** * get 请求 * * @param url * @param callBack */ public void getJson(String url,final HttpCallBack callBack){ Request request = new Request.Builder().url(url).build(); OnStart(callBack); client.build().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { OnError(callBack,e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){ onSuccess(callBack,response.body().string()); }else{ OnError(callBack,response.message()); } } }); } public void OnStart(HttpCallBack callBack){ if(callBack!=null){ callBack.onstart(); } } public void onSuccess(final HttpCallBack callBack,final String data){ if(callBack!=null){ handler.post(new Runnable() { @Override public void run() {//在主线程操作 callBack.onSusscess(data); } }); } } public void OnError(final HttpCallBack callBack,final String msg){ if(callBack!=null){ handler.post(new Runnable() { @Override public void run() { callBack.onError(msg); } }); } } public static abstract class HttpCallBack{ //开始 public void onstart(){}; //成功回调 public abstract void onSusscess(String data); //失败 public void onError(String meg){}; } }
这是一个类,创建一下
import android.util.Log; import java.io.IOException; import okhttp3.FormBody; import okhttp3.Interceptor; import okhttp3.Request; public class LogInterceptor implements Interceptor { public static String TAG = "LogInterceptor"; @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); long startTime = System.currentTimeMillis(); okhttp3.Response response = chain.proceed(chain.request()); long endTime = System.currentTimeMillis(); long duration=endTime-startTime; okhttp3.MediaType mediaType = response.body().contentType(); String content = response.body().string(); Log.d(TAG,"\n"); Log.d(TAG,"----------Start----------------"); Log.d(TAG, "| "+request.toString()); String method=request.method(); if("POST".equals(method)){ StringBuilder sb = new StringBuilder(); if (request.body() instanceof FormBody) { FormBody body = (FormBody) request.body(); for (int i = 0; i < body.size(); i++) { sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ","); } sb.delete(sb.length() - 1, sb.length()); Log.d(TAG, "| RequestParams:{"+sb.toString()+"}"); } } Log.d(TAG, "| Response:" + content); Log.d(TAG,"----------End:"+duration+"毫秒----------"); return response.newBuilder() .body(okhttp3.ResponseBody.create(mediaType, content)) .build(); } }添加异常捕获类
在初始化app中写
CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext());import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler; import java.lang.reflect.Field; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Build; import android.os.Environment; import android.os.Looper; import android.util.Log; import android.widget.Toast; /** * UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告. * * @author user * */ public class CrashHandler implements UncaughtExceptionHandler { public static final String TAG = "CrashHandler"; //系统默认的UncaughtException处理类 private Thread.UncaughtExceptionHandler mDefaultHandler; //CrashHandler实例 private static CrashHandler INSTANCE = new CrashHandler(); //程序的Context对象 private Context mContext; //用来存储设备信息和异常信息 private Map