当前位置: 首页 > news >正文

【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对象,以免引发其他类似的异常。
重要代码:

	  String responseBody = response.body().string(); // 缓存响应体内容
http://www.lryc.cn/news/124410.html

相关文章:

  • Django之定时任务--apscheduler
  • Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)
  • HBuilderX
  • C数据结构与算法——常见排序算法时间复杂度比较 应用
  • C++并发多线程--死锁问题及解决方法
  • 【Spring】纯注解开发
  • 【算法心得】正确估计dfs时间复杂度;剪枝优化不怕重构
  • 通过网关访问微服务,一次正常,一次不正常 (nacos配置的永久实例却未启动导致)
  • div输入框的文字超过指定行数用省略号表示css
  • STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度
  • 液体神经网络:LNN是个啥概念?
  • 开源数据库Mysql_DBA运维实战 (DCL/日志)
  • 神经网络基础-神经网络补充概念-03-逻辑回归损失函数
  • 基于深度信念神经网络的矿石产量预测,基于DBN的矿石产量预测,DBN的详细原理
  • JavaWeb-Filter过滤器
  • python如何实现1ms内触发两个接口请求
  • 深入解析路由与网络:网络的脉络
  • spring.HttpMessageNotReadableException: JSON parse error
  • 安全中间件的设计思路和简单实践
  • 试卷扫描成电子版方法分享,这个方法不要错过
  • 【PostgreSQL的CLOG解析】
  • 腾讯云国际站代充-阿里云ECS怎么一键迁移到腾讯云cvm?
  • 东方晶源亮相第十一届半导体设备年会,共话发展“芯”机遇
  • git修改历史commit信息
  • 基于K8S环境部署Dolphinscheduler及简单应用
  • Linux的ln命令
  • 深入了解Bear Necessities Hackathon黑客松的优胜者们
  • mysql-tokudb使用qa
  • 对比学习论文综述总结
  • 【BASH】回顾与知识点梳理(二十三)