3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
response.body().string() → 您只能調(diào)用 string() 一次。
由于響應(yīng)正文可能很大,因此 OkHttp 不會(huì)將其存儲(chǔ)在內(nèi)存中,而是在您需要時(shí)將其作為流從網(wǎng)絡(luò)讀取。
當(dāng)您將正文作為 string() 讀取時(shí),OkHttp 將下載響應(yīng)正文并將其返回給您,而不保留對(duì)字符串的引用,如果沒有新請(qǐng)求,則無(wú)法下載兩次。
您不止一次地調(diào)用它。
try(..){
System.out.println(response.body().string());// once
return response.body().string();`// twice
}
您可以通過調(diào)用一次將響應(yīng)保存在變量中,然后使用該變量進(jìn)行進(jìn)一步使用。
try(..){
String responseData = response.body().string();//Be cautious about memory constraint here.
System.out.println(responseData);
return responseData;`
}

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
發(fā)生這種情況是因?yàn)?code>.string()只能調(diào)用一次
您可以通過以下方式解決該問題(Java):
ResponseBody responseBodyCopy = response.peekBody(Long.MAX_VALUE); responseBodyCopy.string();
通過復(fù)制響應(yīng)正文,您可以避免使用.string()
兩次

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