【发布时间】:2017-12-18 18:11:35
【问题描述】:
我正在调用本地服务器的 API 来验证是否发生错误 400。此错误按预期发生。在这一刻,我想获得价值。它是一个 JSON 对象。 来自服务器的消息即将到来,但某个时刻的值消失了。我知道这是因为我正在调试应用程序。在来自 Retrofit 的 response.errorBody().string() 消息的第一个响应中,字符串值就在那里。但在响应之后,值变为空。我放了一张图片来说明发生了什么。
我的代码是:
public class ServerResponse implements Parcelable {
@SerializedName("message")
private String message;
public ServerResponse(){}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(message);
}
public ServerResponse(String message){
this.message = message;
}
private ServerResponse(Parcel parcel){
message = parcel.readString();
}
public static final Parcelable.Creator<ServerResponse> CREATOR =
new Parcelable.Creator<ServerResponse>() {
public ServerResponse createFromParcel(Parcel in) {
return new ServerResponse(in);
}
public ServerResponse[] newArray(int size) {
return new ServerResponse[size];
}
};
public String getMessage(){
return message;
}
}
这是另一段代码:
super.data.restApi(WorkOrderAPI.class)
.answerWorkOrder(
t,
workOrderId,
request.getQuestionFormId(),
isOffline ? 1 : 0,
request)
.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
if (response.isSuccessful()) {
onResult.onSuccessful(null);
} else {
try {
if(response.code() == 400) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateTypeDeserializer())
.create();
ServerResponse serverResponse = gson.fromJson(response.errorBody().charStream(), ServerResponse.class);
onResult.onUnsuccessful(new DefaultError(response.code(), serverResponse.getMessage()));
}
为什么在第一行代码之后值就消失了?
【问题讨论】: