OKHttp响应失败:java.lang.IllegalStateException:已关闭
我请求链接以获取JSON,但response.body().string()值始终存在错误。另一种方法是,我将response.body().string()拆分为response.body()和string,但Android studio找不到ResponseBody。双向不起作用。请帮忙OKHttp响应失败:java.lang.IllegalStateException:已关闭,java,android,okhttp,Java,Android,Okhttp,我请求链接以获取JSON,但response.body().string()值始终存在错误。另一种方法是,我将response.body().string()拆分为response.body()和string,但Android studio找不到ResponseBody。双向不起作用。请帮忙 String doGetRequest(String url) throws IOException { Request request = new Request.Builder()
String doGetRequest(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
//ResponseBody responseBody = response.body();
//String content = responseBody.string();
//System.out.println(content);
return response.body().string();
}
}
response.body().string()→ 只能调用string()一次
因为响应体可能很大,所以OkHttp不会将其存储在内存中,所以当您需要时,它会将其作为流从网络中读取
当您以字符串形式读取正文时()OkHttp将下载响应正文并将其返回给您,而不保留对字符串的引用,如果没有新请求,则无法下载两次
你不止一次这么叫它
try(..){
System.out.println(response.body().string());// once
return response.body().string();`// twice
}
您可以通过调用一次将响应保存在变量中,然后使用该变量进一步使用
try(..){
String responseData = response.body().string();//Be cautious about memory constraint here.
System.out.println(responseData);
return responseData;`
}
是的,我在调试模式下看到了,但我使用了Responsebody,然后转换为字符串。同样的错误再次发生。我找到了解决这个问题的新方法。I关闭响应,例如
response.close()它解决了我的问题。