Kam*_*mil 2 java android okhttp
我请求链接以获取 JSON 但 response.body().string() 值总是有错误。另一种方式,我将 response.body().string() 拆分为 response.body() 和 string 但 Android studio 没有找到 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();
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*kov 12
发生这种情况是因为.string()只能调用一次
您可以通过以下方式解决该问题(Java):
ResponseBody responseBodyCopy = response.peekBody(Long.MAX_VALUE);
responseBodyCopy.string();
Run Code Online (Sandbox Code Playgroud)
通过复制响应正文,您可以避免使用.string()两次
response.body().string() ? 您只能调用 string() 一次。
因为响应体可能很大,所以 OkHttp 不会将其存储在内存中,它会在您需要时将其作为流从网络读取。
当您将正文作为 string() 读取时,OkHttp 会下载响应正文并将其返回给您而不保留对字符串的引用,如果没有新请求,则无法下载两次。
你不止一次调用它。
try(..){
System.out.println(response.body().string());// once
return response.body().string();`// twice
}
Run Code Online (Sandbox Code Playgroud)
您可以通过调用一次将响应保存在变量中,然后将该变量用于进一步使用。
try(..){
String responseData = response.body().string();//Be cautious about memory constraint here.
System.out.println(responseData);
return responseData;`
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |