Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OKHttp响应失败:java.lang.IllegalStateException:已关闭_Java_Android_Okhttp - Fatal编程技术网

OKHttp响应失败:java.lang.IllegalStateException:已关闭

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()

我请求链接以获取JSON,但response.body().string()值始终存在错误。另一种方法是,我将response.body().string()拆分为response.body()和string,但Android studio找不到ResponseBody。双向不起作用。请帮忙

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()