我正在使用retrofit和gson将我的json反序列化为realm对象。这在大多数情况下都很好用。但是当涉及到
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;
}
}
我的 realm 对象如下所示
public class RealmPerson extends RealmObject {
@PrimaryKey
private String userId;
...
private RealmList<RealmString> stringStuff;
private RealmList<SimpleRealmObj> otherStuff;
<setters and getters>
}
SimpleRealmObj 只包含 String 元素,因此它能很好地运行。
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﹕ main com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was NAME at line 1 column 3 path $.
我之前尝试使用RealmList和RealmString适配器来解决问题,但都没有成功。 目前我找到的唯一解决方法是https://github.com/realm/realm-java/issues/620#issuecomment-66640786 有更好的解决方案吗?
tags.add((RealmString) context.deserialize(je, RealmString.class))
中,出现了java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
。 - Henrique de Sousa