我有这个模型:Map<MyObjectA, Set<MyObjectB>>
其中MyObjectA
是一个复杂的对象但MyObjectB
不是。Parcelable
。两者都是{
"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);
}
但这并不是:
line 810
投掷:
java.lang.IllegalStateException:预期为BEGIN_OBJECT但是为STRING 在第1行第3栏路径$。
我已经运行了调试模式并在Gson.java
的{{1}}处使用了断点:
...
try {
reader.peek();
isEmpty = false;
TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);
TypeAdapter<T> typeAdapter = getAdapter(typeToken);
T object = typeAdapter.read(reader);
return object;
} catch (EOFException e) {...}
}
typeToken
和typeAdapter
是正确的,但typeAdapter.read(reader);
会失败...
typeToken = java.util.LinkedHashMap<MyObjectA, java.util.HashSet<MyObjectB>>
typeAdapter class 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;
...
}