3 回答

TA貢獻1828條經驗 獲得超4個贊
response.body().string() → 您只能調用 string() 一次。
由于響應正文可能很大,因此 OkHttp 不會將其存儲在內存中,而是在您需要時將其作為流從網絡讀取。
當您將正文作為 string() 讀取時,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;`
}

TA貢獻1890條經驗 獲得超9個贊
發生這種情況是因為.string()
只能調用一次
您可以通過以下方式解決該問題(Java):
ResponseBody responseBodyCopy = response.peekBody(Long.MAX_VALUE); responseBodyCopy.string();
通過復制響應正文,您可以避免使用.string()
兩次

TA貢獻1825條經驗 獲得超6個贊
也許你正在像這樣的攔截器中關閉你的響應
override fun intercept(chain: Interceptor.Chain): Response {
//...
val response = chain.proceed(builder.build())
response.close()
//...
}
添加回答
舉報