完美解决okhttp报java.lang.IllegalStateException: closed,java.lang.IllegalStateException: closed

目前的我的场景是:
使用拦截器全局验证token

 Request request = requestBuilder.build();
        Response originalResponse = chain.proceed(request);
        ResponseBody result = originalResponse.body();
        final MediaType mediaType = result.contentType();
        Log.e("HeaderInterceptor", "intercept: " + result);
        final String s = result.string();
        if (!validateToken(s)) {
            return null;
        } else {
            Log.e("HeaderInterceptor", "intercept: " + originalResponse);
//            return chain.proceed(request);
            return originalResponse.newBuilder().body(ResponseBody.create(mediaType,s)).build();
        }

上面的办法只是重新创建了ResponseBody 然后将服务器返回的数据重新填充进去 ,我们也可以通过下面的方法
绕过上面的坑

   ResponseBody responseBody = originalResponse.body();
        BufferedSource source = responseBody.source();
        source.request(Long.MAX_VALUE); // Buffer the entire body.
        Buffer buffer = source.buffer();
        Charset charset = UTF8;
        MediaType contentType = responseBody.contentType();
        if (contentType != null) {
            charset = contentType.charset(UTF8);
        }

        String bodyString = buffer.clone().readString(charset);

        LogUtil.debug("body---------->" + bodyString);

相关链接:https://juejin.im/entry/584144d0128fe1006c3cfb8f

https://stackoverflow.com/questions/28306524/consuming-one-shot-responsebody-from-okhttp-causes-issues-with-retrofit

HttpLoggingInterceptor.java

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,593评论 25 709
  • 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,现在已...
    Android开发__落岑阅读 1,836评论 0 2
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,642评论 2 45
  • 想写一座老院子,有故乡有情怀有眷恋还有关上门的温暖。 从这里开始吧。 每次假满小破孩儿都会哭闹一场,啜啜泣泣的说让...
    迷鹿ii阅读 278评论 2 3
  • 八月的拉萨,秋高气爽。 当夜幕降临,华灯初上时,笼罩在星光和璀璨灯火下的拉萨特别迷人,雄伟的布达拉宫在灯火的映衬下...
    一笑人生阅读 370评论 1 1