做弩的网站,网站建设如何为企业电商化转型赋能,网站点赞怎么做,自己设计logo软件解决
java.lang.IllegalStateException: closed异常通常是由于OkHttp中的Response对象在调用response.body().string()后被关闭而导致的。
在代码中#xff0c;在onResponse()方法中如果两次调用了response.body().string()#xff0c;每次调用都会消耗掉响应体并关闭Respo…解决
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(); // 缓存响应体内容