改造1.9自定义处理程序错误

时间:2016-03-26 11:00:08

标签: android retrofit

我是改装的新手,我正在尝试为我的改造实施自定义错误处理程序。

我从服务器上回复了以下回复:

[
  {
    "field": "username",
     "message": "Username \"test\" has already been taken."
  },
  {
    "field": "email",
    "message": "Email \"test@custom.ro\" has already been taken."
  }
]

在我的错误处理程序中,我执行:

try {
      ModelError restError = (ModelError) cause.getBodyAs(ModelError.class);
    }
catch (Exception ex) {
            Log.d("custom", ""+ex.toString());
        } 

我的模型看起来像:

public class ModelError
{
   String message;
   String field;
}

但我记得:

 Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path 

然后我替换错误处理程序whit中的代码:

 List<ModelError> restError = (List<ModelError>) cause.getBodyAs(ModelError.class);

仍然在日志中收到同样的错误。

我做错了什么? 感谢

3 个答案:

答案 0 :(得分:0)

public class ModelResponse{
ArrayList<ModelError> modelErrorList; 
}

try {
      ModelResponse modelResponse = (ModelResponse) cause.fromJson(response, ModelResponse.class);
    }
catch (Exception ex) {
            Log.d("custom", ""+ex.toString());
        } 

我相信cause是gson对象。希望这能帮助您实现目标。

答案 1 :(得分:0)

您还可以使用以下代码获取解析器错误响应,而无需添加新类来处理响应:

List<ModelError> error = (List<ModelError>) cause.getBodyAs(new TypeToken<List<ModelError>>() {}.getType());

<强>更新

假设Rest是您的Retrofit服务,您可以通过这种方式获得错误响应:

Rest rest = ...// creating rest service
rest.requestToWebService(data, new Callback<WebServiceResponse>() {
            @Override
            public void success(WebServiceResponse webServiceResponse, Response response) {
              // Do success things!
            }

            @Override
            public void failure(RetrofitError error) {
                List<ModelError> modelErrors = (List<ModelError>) error.getBodyAs(new TypeToken<List<ModelError>>() {}.getType());
            }
        });

答案 2 :(得分:0)

每个Json对象都以&#39; {&#39;标志,每个json数组都以&#39; [&#39;标志。 你得到的错误是因为你试图从包含两个Model类(即模型数组)的东西创建一个json对象(即Model类),尝试将错误解析为错误列表而不是对象,你会没事的。