retrofit2.0+OkHttpClient 中新增公共參數(shù)get/post及網(wǎng)絡請求日志打印

需求1:更加統(tǒng)一方便管理公共參數(shù)
需求2:方便調(diào)試http請求日志,查看請求參數(shù)和返回參數(shù)

新增一個網(wǎng)絡攔截器,代碼如下:

LogInterceptor 類:

public class LogInterceptor implements Interceptor {

public static String TAG = "LogInterceptor";

@Override
public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
    Request oldRequest = chain.request();
    Request.Builder newRequestBuild;
    String method = oldRequest.method();
    String postBodyString="";
    if("POST".equals(method)){
        FormBody.Builder formBodyBuilder = new FormBody.Builder();
        formBodyBuilder.add("deviceOs", iCommon.DEVICE_OS);
        formBodyBuilder.add("appVersion", Utils.instance().getAppVersionName());
        newRequestBuild = oldRequest.newBuilder();

        RequestBody formBody = formBodyBuilder.build();
        postBodyString = bodyToString(oldRequest.body());
        postBodyString += ((postBodyString.length() > 0) ? "&" : "") + bodyToString(formBody);
        newRequestBuild.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"), postBodyString));
    }else {
        // 添加新的參數(shù)
        HttpUrl.Builder commonParamsUrlBuilder = oldRequest.url()
            .newBuilder()
            .scheme(oldRequest.url().scheme())
            .host(oldRequest.url().host())
            .addQueryParameter("deviceOs", iCommon.DEVICE_OS)
            .addQueryParameter("appVersion", Utils.instance().getAppVersionName());
        newRequestBuild = oldRequest.newBuilder()
            .method(oldRequest.method(), oldRequest.body())
            .url(commonParamsUrlBuilder.build());
    }
    Request newRequest = newRequestBuild
        .addHeader("Accept", "application/json")
        .addHeader("Accept-Language", "zh")
        .build();

    long startTime = System.currentTimeMillis();
    okhttp3.Response response = chain.proceed(newRequest);
    long endTime = System.currentTimeMillis();
    long duration = endTime - startTime;
    okhttp3.MediaType mediaType = response.body().contentType();
    String content = response.body().string();
    int httpStatus = response.code();
    StringBuilder logSB = new StringBuilder();
    logSB.append("-------start:"+method+"|");
    logSB.append(newRequest.toString()+"\n|");
    logSB.append(method.equalsIgnoreCase("POST")?"post參數(shù){"+ postBodyString +"}\n|":"");
    logSB.append("httpCode=" + httpStatus + ";Response:" + content+"\n|");
    logSB.append("----------End:" + duration + "毫秒----------");
    Log.d(TAG,logSB.toString());
    return response.newBuilder()
        .body(okhttp3.ResponseBody.create(mediaType, content))
        .build();
}
private static String bodyToString(final RequestBody request) {
    try {
        final RequestBody copy = request;
        final Buffer buffer = new Buffer();
        if (copy != null)
            copy.writeTo(buffer);
        else
            return "";
        return buffer.readUtf8();
    } catch (final IOException e) {
        return "did not work";
    }
}
}

使用方法:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.retryOnConnectionFailure(false)
        .cookieJar(s_cookieJar)
        .connectTimeout(DEFAULT_NETWORK_TIMEOUT, TimeUnit.MILLISECONDS)
        .readTimeout(DEFAULT_NETWORK_TIMEOUT, TimeUnit.MILLISECONDS)
        .writeTimeout(DEFAULT_NETWORK_TIMEOUT, TimeUnit.MILLISECONDS)
        .addInterceptor(new LogInterceptor());
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,068評論 25 709
  • iOS網(wǎng)絡架構(gòu)討論梳理整理中。。。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,490評論 1 23
  • 上回在《神奇的中醫(yī)1.0針灸是個什么鬼?》 中咱們簡要的講了一下針灸是怎么來的,但其實只講了一半,真正的針灸不只是...
    孫蛋蛋閱讀 1,143評論 8 9
  • 呆在學校的最后一天,夜晚宿舍樓沒幾個房間是還亮著燈的。但白天,校園里的人其實不少。 在研究生辦公室值班,又坐了一天...
    六月的碎碎念閱讀 278評論 0 0
  • 一個人身邊圍繞著很多朋友,天天聚集玩樂。但那只是一時的狀態(tài),并不是恒久不變的。每一個人都會有這么一段時光,如果分不...
    喃喃自語S閱讀 227評論 0 0

友情鏈接更多精彩內(nèi)容