【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异常。

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

java 复制代码
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对象,以免引发其他类似的异常。

重要代码:

java 复制代码
	  String responseBody = response.body().string(); // 缓存响应体内容
相关推荐
2501_916008891 分钟前
全面介绍Fiddler、Wireshark、HttpWatch、SmartSniff和firebug抓包工具功能与使用
android·ios·小程序·https·uni-app·iphone·webview
Coder_Boy_36 分钟前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
玉梅小洋43 分钟前
Windows 10 Android 构建配置指南
android·windows
invicinble1 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟1 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖1 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
Libraeking2 小时前
视觉篇:Canvas 自定义绘图与高级动画的华丽圆舞曲
android·经验分享·android jetpack
qq_12498707533 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_3 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.3 小时前
Day06——权限认证-项目集成
java