我使用Retrofit 2有以下类,并指责错误尝试解析服务器错误。
错误
java.io.EOFException:第1行第1行路径$
的输入结束
APIError.java
public class APIError {
private int statusCode;
private String message;
public APIError() {
}
public int status() {
return statusCode;
}
public String message() {
return message;
}
}
ErrorUtils.java
public class ErrorUtils {
public static APIError parseError(Response<?> response) {
Converter<ResponseBody, APIError> converter =
HttpConnectionManager.retrofit
.responseBodyConverter(APIError.class, new Annotation[0]);
APIError error;
try {
error = converter.convert(response.errorBody()); //<-- Error line
} catch (IOException e) {
return new APIError();
}
return error;
}
/**
* Configure response service error to show in the app.
* @param response
*/
public static void configResponseError(Context context, Response<JsonObject> response) {
APIError error = ErrorUtils.parseError(response);
if(response.message() != null && response.errorBody() != null) {
AppUtils.showErrorDialog((Activity) context, "Error: " + error.message() +
"\n\nStatus: " + error.status());
} else {
AppUtils.showErrorDialog((Activity) context, context.getString(R.string.ws_error));
}
Log.e(AppConstants.ERROR, "onResponse error message: " + error.message());
Log.e(AppConstants.ERROR, "onResponse error status: " + error.status());
}
}
MyCallWs:
Call<JsonObject> call = methodService.createAccount(appUserJson);
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
if (response.isSuccessful() && response.body() != null) {
JsonObject responseJson = response.body();
//TODO: Success
} else {
ErrorUtils.configResponseError(MyActivity.this, response);
}
progressDialog.dismiss();
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
}
});
按照此step by step来捕捉Retrofit 2中的错误
答案 0 :(得分:0)
这意味着您的请求期望答案中的JsonObject
,但该请求不返回任何内容,仅返回结果代码(200,...),其中包含解析错误消息。将JsonObject
替换为Void
(如果使用RxJava,则替换为Observable<Response<Void>>
),它应该可以工作。