【Android】okhttp爆java.lang.IllegalStateException: closed的解决方法

这篇具有很好参考价值的文章主要介绍了【Android】okhttp爆java.lang.IllegalStateException: closed的解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解决

java.lang.IllegalStateException: closed异常通常是由于OkHttp中的Response对象在调用response.body().string()后被关闭而导致的。

在代码中,在onResponse()方法中如果两次调用了response.body().string(),每次调用都会消耗掉响应体并关闭Response对象。因此,当第二次调用response.body().string()时,就会抛出java.lang.IllegalStateException: closed异常。

为了解决这个问题,可以将响应体的内容缓存起来,然后多次使用。下面是修改后的代码示例:

public void onResponse(Call call, Response response) throws IOException {
    String responseBody = response.body().string(); // 缓存响应体内容


    if (!response.isSuccessful()) {
 
        callback.onComponentInitFinish(COMPONENT_TOKEN, ERROR_GET_TOKEN_FAIL, "获取token失败");
    } else {
        TokenInfoBean tokenInfoBean = mGson.fromJson(responseBody, TokenInfoBean.class);

        if (tokenInfoBean != null && tokenInfoBean.ret != null) {
            APIBase.okHandler.post(new Runnable() {
                public void run() {
                    KeyCenterCheckHelp.checkAndToast(tokenInfoBean.ret.code, tokenInfoBean.ret.message);
                }
            });
        }

        if (tokenInfoBean != null && tokenInfoBean.data != null) {
         
            savedToken = tokenInfoBean.data.token;
            tokenStartStamp = System.currentTimeMillis();
            tokenExpiredStamp = tokenStartStamp + tokenInfoBean.data.duration * 1000;
            callback.onComponentInitFinish(COMPONENT_TOKEN, 0, "");
        } else {
            
            callback.onComponentInitFinish(COMPONENT_TOKEN, tokenInfoBean.ret.code, tokenInfoBean.ret.message);
        }
    }
}

在修改后的代码中,我们将response.body().string()的结果缓存在responseBody变量中,并在后续的逻辑中多次使用。这样就避免了多次调用导致的异常。

请注意,这只是解决java.lang.IllegalStateException: closed异常的一种方式。确保在其他地方没有关闭Response对象,以免引发其他类似的异常。
重要代码:文章来源地址https://www.toymoban.com/news/detail-657308.html

	  String responseBody = response.body().string(); // 缓存响应体内容

到了这里,关于【Android】okhttp爆java.lang.IllegalStateException: closed的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Caused by: java.lang.IllegalStateException:

    目录 问题描述 解决方案 1. 修改JVM的-Xss参数 2. 检查循环继承依赖项 3. 更新相关库和依赖 总结 在使用Java开发Web应用程序时,我们有时会遇到​ ​Caused by: java.lang.IllegalStateException​ ​​异常,其中包含一个关于StackOverflow错误的描述。这种错误可能会导致无法完成对Web应用程

    2024年02月03日
    浏览(38)
  • 解决java.lang.IllegalStateException: Duplicate key异常

    项目重启后突然报这个异常 看日志应该是在初始化字典,源代码 这里的操作是把词典list转换成map,然后key冲突。 但我比对了一下数据,没有找到重复的dictValue,报这个错有点莫名其妙。 最后的解决办法参考了其他网友,得以顺利解决,最后上修改后的代码 Collectors.toMap 增

    2024年02月15日
    浏览(37)
  • 已解决java.lang.IllegalStateException: Duplicate key

    已解决java.lang.IllegalStateException: Duplicate key java.lang.IllegalStateException: Duplicate key java.lang.IllegalStateException: Duplicate key 是由于在使用 Map 或 Set 时,试图将一个已经存在的键值或元素添加到集合中而引发的异常。 下滑查看解决方法 要解决这个问题,可以采取以下步骤: 确保你使用

    2024年02月07日
    浏览(32)
  • 解决Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map ‘inteController‘

    出现这个错也可能会出现项目无法启动的错误。完整错误是 一、错误出现原因 :         controller层出现了重复的方法映射                  可以看到图片中两个方法的映射是一样的,这是问题所在 解决方法也很简单,既然已经知道了问题所在那么解决起来也很简单

    2024年02月10日
    浏览(29)
  • Java IDEA java.lang.IllegalStateException: Failed to introspect Class报错原因和解决办法

    发现是因为 org.redisson:redisson.spring.boot.starter 3.10.6这个包引入不进来导致的报错 尝试了clean invalid caches and restart都没法解决后 放大招,查看maven右侧Dependencies每一个点进去看是否有jar包冲突,发现有一个包里有一个redis的包, 怀疑jar包冲突,尝试把这个包exclusion掉,可以成功运

    2024年02月04日
    浏览(38)
  • 详细解决java中的Collectors.toMap引起的java.lang.IllegalStateException: Duplicate key xxx 的错误

    今天,测试在禅道上给我指出一个正式环境 bug ,如下图所示: 即 java.lang.IllegalStateException: Duplicate key 2 。 根据 java.lang.IllegalStateException: Duplicate key 2 可知,这是 java 抛出的存在 2个重复键 的错误。 如果想要弄清楚错误原因,通过如下几个步骤分析: 首先,看到这个错误信息

    2024年01月19日
    浏览(45)
  • Maximum upload size exceeded; nested exception is java.lang.IllegalStateException解决办法

    一、问题描述 Springboot文件上传时报错:org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field fileUrl exceeds its maximum permitted size of 10485760 bytes. 完整报错

    2024年02月11日
    浏览(27)
  • 已解决:Unexpected exception during bean creation; nested exception is java.lang.IllegalStateException:

    这个异常通常是由于在使用 Spring Cloud Feign 客户端进行负载均衡时缺少相关的依赖引起的。具体来说,它提示你忘记在项目的依赖中包含  spring-cloud-starter-loadbalancer 。 spring-cloud-starter-loadbalancer  是用于支持负载均衡功能的 Spring Cloud Starter 组件之一。它提供了负责将请求分发

    2024年02月08日
    浏览(31)
  • 【异常解决】java.lang.IllegalStateException: No primary or single unique constructor found for interface

    Springboot + vue3 批量删除规则接口:前端请求如下 后端服务接口请求的方法如下: 结果报错,详情如下: java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List 前端请求不变,后端服务接口请求的方法参数上添加 @RequestBody 即可。 本文完结!

    2024年02月05日
    浏览(32)
  • 解决java.lang.IllegalStateException: Cannot call sendError() after the response has been committed异常

    相信大家自己在用spring boot写restful风格的接口时特别是写文件下载或文件导出时会碰到java.lang.IllegalStateException: Cannot call sendError() after the response has been committed这样的bug,很多人可能一脸困惑,就好奇为什么我文件都已经可以正常导出了,为什么在日志中还是会出现这样的报错

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包