错误
okhttp获取response数据, 控制台报错
java.lang.IllegalStateException: closed
详细错误
2022-09-20 16:58:55.283 16690-17626/com.example.electronicmall E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.example.electronicmall, PID: 16690
java.lang.IllegalStateException: closed
at com.squareup.okhttp.internal.http.HttpConnection$ChunkedSource.read(HttpConnection.java:456)
at okio.Buffer.writeAll(Buffer.java:993)
at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106)
at com.squareup.okhttp.ResponseBody.bytes(ResponseBody.java:57)
at com.squareup.okhttp.ResponseBody.string(ResponseBody.java:83)
at com.example.electronicmall.test.User.UserSubInfoActivity$12$1$1.onResponse(UserSubInfoActivity.java:554)
at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:168)
at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:929)
解决方案
笔者由于在callback中两次调用response.body().string(), 对于第二次操作出现该错误
在callback中删去一次response.body().string()方法即可
对于笔者而言
原因
OkHttp请求回调中response.body().string()只能有效调用一次,调用response.body().string()时数据流已关闭,再次调用提示已closed。把代码修改完为只调用一次response.body().string()即可
参考文献
java.lang.IllegalStateException: closed
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈