Gson抛出JSON错误“;java.lang.IllegalStateException“;
我有这个模型:Gson抛出JSON错误“;java.lang.IllegalStateException“;,java,android,gson,parcelable,illegalstateexception,Java,Android,Gson,Parcelable,Illegalstateexception,我有这个模型:Map其中MyObjectA是一个复杂的对象,但MyObjectB不是。两者都是可包裹的 下面是一个例子: { "my.package.models.MyObjectA@5415636": [{ "member1": "val", "member2": "val", "member2": "val", ... }] } 此操作的工作原理是: private boolean putObject(Stri
Map
其中MyObjectA
是一个复杂的对象,但MyObjectB
不是。两者都是可包裹的
下面是一个例子:
{
"my.package.models.MyObjectA@5415636": [{
"member1": "val",
"member2": "val",
"member2": "val",
...
}]
}
此操作的工作原理是:
private boolean putObject(String key, Object object) {
...
return mPreferences.edit().putString(key, mGson.toJson(object)).commit();
}
但这并不是:
type = new TypeToken<Map<MyObjectA, Set<MyObjectB>>>() {}.getType());
private <T> T getObject(String key, Type t) {
...
return mGson.fromJson(mPreferences.getString(key, null), type);
}
typeToken
和typeAdapter
正确,但typeAdapter.read(读卡器)代码>将失败…
typeToken=java.util.LinkedHashMap
typeAdapter类com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter
我错过了什么?
谢谢
编辑:
public class MyObjectA {
private List<MyObjectB> list;
private String a;
private String b;
private String c;
private int one;
private int two;
...
}
public class MyObjectB {
private String x;
private String y;
private String z;
...
}
公共类MyObjectA{
私人名单;
私人字符串a;
私有字符串b;
私有字符串c;
私人int one;
二等兵;
...
}
公共类MyObject B{
私有字符串x;
私有字符串y;
私有字符串z;
...
}
什么是MyObjectA和MyObjectB?很难说您希望解析的结果是什么。那么,对于您的示例JSON,您希望解析的结果是什么样的?在那个例子中,你的键看起来像是某个对象的toString()呈现,解析时可能没有用。该死的,我想我知道它是什么,我不能把一个复杂的对象作为键,对吗?很久以前我就遇到过这个问题:我现在想起来了:/对,最好是用字符串作为键,所以HashMap应该可以工作。什么是MyObjectA和MyObjectB?很难说您希望解析的结果是什么。那么,对于您的示例JSON,您希望解析的结果是什么样的?在那个例子中,你的键看起来像是某个对象的toString()呈现,解析时可能没有用。该死的,我想我知道它是什么,我不能把一个复杂的对象作为键,对吗?很久以前我就遇到过这个问题:我现在记起来了:/Right,最好是使用字符串作为键,所以HashMap应该可以正常工作。
public class MyObjectA {
private List<MyObjectB> list;
private String a;
private String b;
private String c;
private int one;
private int two;
...
}
public class MyObjectB {
private String x;
private String y;
private String z;
...
}