天天看點

OKHTTP工具類的二次封裝,和Logger列印漂亮日志的工具類

OKHTTP

public class OkHttpUtil {
    private static OkHttpUtil sInstance;
    private OkHttpClient mOkHttpClient;
    private Gson mGson = new Gson();
    private final int REQUEST_OK = 1;//請求成功
    private final int REQUEST_FAILER = 2;//請求失敗
    private Handler mHandler = new Handler();

    private OkHttpUtil() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.writeTimeout(5000, TimeUnit.MILLISECONDS);
        builder.connectTimeout(5000, TimeUnit.MILLISECONDS);
        builder.readTimeout(5000, TimeUnit.MILLISECONDS);
        //添加請求頭攔截器
        builder.addInterceptor(new HeaderInterceptor());
        builder.addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                if (!TextUtils.isEmpty(message)) {
                    if (message.startsWith("{") || message.startsWith("[")) {
                        //列印json
                        LoggerUtil.json(message);

                    } else {
                        LoggerUtil.d(message);
                    }

                }
            }
        }).setLevel(HttpLoggingInterceptor.Level.BODY));
        mOkHttpClient = builder.build();
    }

    //單例模式
    public static OkHttpUtil getsInstance() {
        if (sInstance == null) {
            //a,b
            synchronized (OkHttpUtil.class) {
                if (sInstance == null) {
                    sInstance = new OkHttpUtil();
                }
            }
        }
        return sInstance;
    }

    public <T> void doGet(String url, final Class<T> cls, final NetCallBack netCallBack) {
        Request.Builder builder = new Request.Builder();
        builder.url(url);
        final Request request = builder.build();
        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        netCallBack.onFailure(e.getMessage());
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                ResponseBody body = response.body();
                String jsonData = body.string();
                final    T data = mGson.fromJson(jsonData, cls);
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        netCallBack.onResponse(data);
                    }
                });
            }
        });
    }


    public void doPostJson(String url, Map parame){
        Request.Builder builder = new Request.Builder();
        builder.url(url);
        RequestBody requestBody = null;
        MediaType parse = MediaType.parse("application/json utf-8");
        Gson gson = new Gson();
        String jsonParam = gson.toJson(parame);
        requestBody = RequestBody.create(parse, jsonParam);
        builder.post(requestBody);
        Request request = builder.build();
        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
            
            }
        });
    }

    public void postFormData(Map parame){

        FormBody formBody = null;

        FormBody.Builder builder = new FormBody.Builder();
        builder.add("","");
        //....
         formBody = builder.build();

         Request request = null;
         request=new Request.Builder()
                 .url("")
                 .post(formBody)
                 .build();

        Call call = mOkHttpClient.newCall(request);
        call.enqueue(null);
    }

    public void postFile(){

    }

  public  interface NetCallBack<T> {
        void onFailure(String msg);

        void onResponse(T data);
    }


}
           

Logger的工具類

public class LoggerUtil {

    public static void init(){

        Logger.addLogAdapter(new AndroidLogAdapter());
    }
    public static void json(String json) {
        Logger.json(json);
    }

    public static void d(String msg) {
        Logger.d(msg);
    }
}
           

添加請求頭的工具類

public class HeaderInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request.Builder builder = request.newBuilder();
        //請求頭也是參數
        builder.addHeader("userId","");
        builder.addHeader("sessionId","");

        Request newRequest = builder.build();
        Response proceed = chain.proceed(newRequest);
        return proceed;
    }
}
           

繼續閱讀