改造2在第1行第1列路径$的输入结束

时间:2016-08-05 18:14:25

标签: android retrofit2

我使用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中的错误

1 个答案:

答案 0 :(得分:0)

这意味着您的请求期望答案中的JsonObject,但该请求不返回任何内容,仅返回结果代码(200,...),其中包含解析错误消息。将JsonObject替换为Void(如果使用RxJava,则替换为Observable<Response<Void>>),它应该可以工作。