Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Gson自定义错误处理_Android_Gson - Fatal编程技术网

Android Gson自定义错误处理

Android Gson自定义错误处理,android,gson,Android,Gson,我试图使用这个库来解析一些json数据。来自服务器的响应可以是以下任一项: 成功结果: {myObject: {foo:"1", bar:"bleh"}} 故障结果: {error: {message:"invalid token", code:320} } Gson似乎只能处理一种返回类型,例如: Gson gson = new Gson(); MyObject object = gson.fromJson(value, MyObject.class); 如何使用Gson正确解析feed

我试图使用这个库来解析一些json数据。来自服务器的响应可以是以下任一项:

成功结果:

{myObject: {foo:"1", bar:"bleh"}}
故障结果:

{error: {message:"invalid token", code:320} }
Gson似乎只能处理一种返回类型,例如:

Gson gson = new Gson();
MyObject object = gson.fromJson(value, MyObject.class);

如何使用Gson正确解析feed中的数据/(错误),而不仅仅是直接解析JSON

因为你不知道你将得到什么,所以很难使用像Gson这样的东西并反序列化到POJO。实际上,您将获得一个包含“myObject”或“error”字段的对象。一种方法是简单地创建一个综合对象。Gson在解析JSON时将任何不存在的字段设置为
null
,这样就可以了:

class JSONResponse {
    private MyObject myObject;
    private Error error;

    static class MyObject {
        String foo;
        String bar;
    }

    static class Error {
        String message;
        int code;
    }

    public boolean isError() {
        return error != null;
    }

    // Getters that access the fields of the objects
    // ...
}

谢谢@Brian。我就这样结束了

JsonParser parser = new JsonParser();
    parser.parse(value).getAsJsonObject();
然后检查错误节点是否存在,以便抛出服务器异常。如果节点不存在,那么我从那里使用Gson

Gson gson = new GsonBuilder().create();
    ArrayList<GridItemVo> list = gson.fromJson(value, new TypeToken<ArrayList<GridItemVo>>(){}.getType());
Gson Gson=new GsonBuilder().create();
ArrayList=gson.fromJson(值,newTypeToken(){}.getType());

谢谢!这是一个很好的解决方案。我最后手动检查了json中的错误。谢谢你的评论,Brian,我删除了我的帖子。如果我收到MyObject数组,它能工作吗?我担心静态,因为所有对象都有相同的值