微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 反序列化的Gson异常(no-args构造函数不存在)

我遇到了一个只出现在5000台设备中的10台的问题.使用我的仿真器和测试设备无法重现它.这似乎是一个非常具体的问题,只有少数设备.我所拥有的只是堆栈跟踪和我的代码.所以我正在开发一个黑洞,只有在我在GooglePlay上发布新版本之后,我才会看到这些更改是否解决了问题.我刚刚将新版本更新为GooglePlay,但错误仍然存​​在.

这些更改是无参数的构造函数,并更改了WorkIem class to static.

这是堆栈跟踪:

W 6758/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x401a15a0)
E 6758/AndroidRuntime: FATAL EXCEPTION: main
**Caused by: java.lang.RuntimeException: No-args constructor for class com.mypackage.model.UpdaterObject$UpdateReport does not exist. Register an InstanceCreator with Gson for this type to fix this problem.**
    at com.google.gson.MappedobjectConstructor.constructWithNoArgConstructor(MappedobjectConstructor.java:64)
    at com.google.gson.MappedobjectConstructor.construct(MappedobjectConstructor.java:53)
    at com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:40)
    at com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56)
    at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:109)
    at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
    at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:51)
    at com.google.gson.Gson.fromJson(Gson.java:568)
    at com.google.gson.Gson.fromJson(Gson.java:515)
    at com.google.gson.Gson.fromJson(Gson.java:484)
    at com.google.gson.Gson.fromJson(Gson.java:434)
    at com.google.gson.Gson.fromJson(Gson.java:406)
    **at de.fliese.NewVersionCheckerActivity.onCreate(NewVersionCheckerActivity.java:35)**

这是第35行:

UpdateReport report = new Gson().fromJson(jsonStr, UpdateReport.class);

json-String看起来像这样(Workitems可以为null):

{"WorkItems":
[{"Url":"http://url1.comfoo.zip","TypeId":1,"LastModifiedServer":1352598239000},
{"Url":"http://url2.com/bar.zip","TypeId":4,"LastModifiedServer":1352598265000}],
 "ShowQuestionDialog":false,"IsOffline":false,"DoUpdate":true}

最后这是我的UpdateReport类与innerClass:

public class UpdaterObject{     
public class UpdateReport {

            public boolean IsOffline;
            public boolean DoUpdate;
            public boolean ShowQuestionDialog;
            public List<WorkItem> WorkItems;

            public UpdateReport() {        }

            public UpdateReport(boolean isoffline, boolean doUpdate,
                    List<WorkItem> workitems) {
                IsOffline = isoffline;
                DoUpdate = doUpdate;
                WorkItems = workitems;
            }
        }

        public static class WorkItem {

            public int TypeId;
            public String Url;
            public long LastModifiedServer;

            public WorkItem() {        }

            public WorkItem(int typeId, String url, long lastModifiedServer) {
                TypeId = typeId;
                Url = url;
                LastModifiedServer = lastModifiedServer;
            }
        }
    //some methods [....]
    } //end class UpdaterObject

如果有人可以帮助我,我会很高兴.请确保您的答案绝对正确,因为我无法测试!那太好了!

这是我在StackOverFlow上的第一篇文章.请公平.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐