Сбой ответа OKHttp: java.lang.IllegalStateException: закрыто - PullRequest
0 голосов
/ 25 сентября 2019

Я запрашиваю ссылку для получения JSON, но значение response.body (). String () всегда имеет ошибку.Другим способом я разделяю response.body (). String () на response.body () и string, но Android-студия не находит ResponseBody.2 способ не работает.Пожалуйста, помогите!

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

1 Ответ

0 голосов
/ 25 сентября 2019

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;`
}
...