OkHttp日志拦截器LoggingInterceptor


  • 首先我们需要在项目中添加依赖
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
  • 创建拦截器
public class LoggingInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        //Chain 里包含了request和response
        Request request = chain.request();
        long t1 = System.nanoTime();//请求发起的时间
        Logger.info(String.format("发送请求 %s on %s%n%s",request.url(),chain.connection(),request.headers()));
        Response response = chain.proceed(request);
        long t2 = System.nanoTime();//收到响应的时间
        //不能直接使用response.body().string()的方式输出日志
        //因为response.body().string()之后,response中的流会被关闭,程序会报错,
        // 我们需要创建出一个新的response给应用层处理
        ResponseBody responseBody = response.peekBody(1024 * 1024);
        Logger.info(String.format("接收响应:[%s] %n返回json:%s  %.1fms%n%s",
                response.request().url(),
                responseBody.string(),
                (t2-t1) /1e6d,
                response.headers()
                ));
        return response;
    }
}
  • 请求时我们用了两种方法,我们先看第一种使用O看Http的;
    private void useOkHttp() {
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())
                .build();
        Request request = new Request.Builder().url(Urls.requestJokesUrl)
                .header("User-Agent", "OkHttp Example")
                .build();
        client.newCall(request).enqueue(new okhttp3.Callback() {
                @Override
                public void onFailure(okhttp3.Call call, IOException e) {

                }

                @Override
                public void onResponse(okhttp3.Call call, Response response) throws IOException {
                    runOnUiThread(new
                                          Runnable() {
                                              @Override
                                              public void run() {
                                                  Toast.makeText(MainActivity.this, "请求成功", Toast.LENGTH_SHORT).show();
                                              }
                                          });
                }
            });
    }
  • 接下来我们看第二种使用Retrofit的;

用到的接口JokesRequest_interface.java

public interface JokesRequest_interface {

    @Headers("User-Agent:OkHttp Example")
    @GET("content/text.php")
    Call<JokesBean> getJokes(@Query("key") String key,@Query("page") String page,@Query("pagesize") String pageSize);

}

开始请求:

    private void useRetrofit() {
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())
                .build();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Urls.baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();
        JokesRequest_interface request = retrofit.create(JokesRequest_interface.class);
        Call<JokesBean> call = request.getJokes(Constant.DOUBIAN_KEY, "1", "1");
        call.enqueue(new Callback<JokesBean>() {
            @Override
            public void onResponse(Call<JokesBean> call, retrofit2.Response<JokesBean> response) {
                Toast.makeText(MainActivity.this, "请求成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<JokesBean> call, Throwable t) {
            }
        });
    }
  • 最后我们看看拦截到的log日志


    log

我测试的接口是申请的聚合的笑话大全

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,663评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 中午,火急火燎地赶去学校接凡仔放学,可怜哟国庆长假,高中生只放两天半假。 一直喋喋不休地与我讲述学校的趣事,谈论学...
    何无所求阅读 177评论 0 0
  • 昨天跑完步找老友聊天的时候,他说了句很耐人寻味的话:如果你有很多异性表达好感,甚至很多追求者,那你就要好好反...
    乔乔大小姐阅读 150评论 0 1
  • 刚刚理解中二 一直认为自己知道这个词的意思,一直也觉得自己距离这个词很远。实际上,我并不知道,确切地说,我今天才知...
    百界无疆KOKO阅读 363评论 0 0