[英]How to get both a POJO and the raw response string back with retrofit?
FATAL EXCEPTION: main Process: com.packagename, PID: 11371 java.lang.IllegalStateException: Cannot read raw response body of a converted body.
在改造中,您只能讀取 response.body() 一次,因為它是一個流,一旦您調用.string()
或當它自動轉換為您在Response<T>
返回類型中擁有的任何模型類時,它就會自動關閉。 如果您嘗試閱讀兩次,則會出現上述錯誤。
我需要原始響應字符串以及模型類。 做到這一點的最佳方法是什么? 我不想兩次調用 API。 有沒有辦法復制響應體? 理想情況下,我想簡單地將 String 和 T 帶回響應。 也就是說,不必放棄改造帶來的通用類型轉換器
您可以通過添加攔截器( https://square.github.io/okhttp/interceptors/ )並在返回響應之前復制響應主體 BufferedSource 來獲取原始響應主體。 我無法理解為什么有人想要這樣做。
Response response = chain.proceed(request);
ResponseBody responseBody = response.body();
ByteArrayOutputStream output = new ByteArrayOutputStream();
responseBody.source().getBuffer().copyTo(output);
String rawResponseBody = output.toString();
return response;
模型類示例:
public class Post {
@SerializedName("text")
private String text;
private User user;
public String getText() {
return text;
}
public User getUser() {
return user;
}
}
class User{
@SerializedName("id")
private int id;
@SerializedName("name")
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
}}
為了獲得更好的答案:將您的模型類和 onResponse 方法主體放在您的問題中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.