【发布时间】:2015-04-28 06:33:50
【问题描述】:
我正在使用带有 gson 的改造来将我的 json 反序列化为领域对象。这在大多数情况下都非常有效。处理时出现问题
RealmList(String(或任何其他基本数据类型))
由于 Realm 不支持 E 不扩展 Realm 对象的 RealmList,我将 String 包装在 RealmObject 中。
public class RealmString extends RealmObject {
private String val;
public String getValue() {
return val;
}
public void setValue(String value) {
this.val = value;
}
}
我的领域对象如下
public class RealmPerson extends RealmObject {
@PrimaryKey
private String userId;
...
private RealmList<RealmString> stringStuff;
private RealmList<SimpleRealmObj> otherStuff;
<setters and getters>
}
SimpleRealmObj 工作正常,因为它只有字符串元素
public class SimpleRealmObj extends RealmObject {
private String foo;
private String bar;
...
}
如何反序列化 stringStuff?我尝试使用 gson TypeAdapter
public class RealmPersonAdapter extends TypeAdapter<RealmPerson> {
@Override
public void write(JsonWriter out, RealmPerson value) throws IOException {
out.beginObject();
Log.e("DBG " + value.getLastName(), "");
out.endObject();
}
@Override
public RealmPerson read(JsonReader in) throws IOException {
QLRealmPerson rList = new RealmPerson();
in.beginObject();
while (in.hasNext()) {
Log.e("DBG " + in.nextString(), "");
}
in.endObject();
return rList;
}
但是我还是遇到了 IllegalStateException
2334-2334/com.qualcomm.qlearn.app E//PersonService.java:71: 主要 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 应为字符串,但名称位于第 1 行第 3 列路径$。
我之前尝试过RealmList,RealmString 适配器无济于事。 到目前为止,我设法找到的唯一解决方法是https://github.com/realm/realm-java/issues/620#issuecomment-66640786 有更好的选择吗?
【问题讨论】: