我在项目中使用了 Retrofit、Gson 和 Realm。
我有这门课Example
需要是Serializable
。如果没有 Realm,我会这样写:
public class Example implements Serializable {
@SerializationName("users")
private List<String> users
//... getters and setters
}
Realm 开始发挥作用,Example
变为(请注意,出于兼容性原因,getter 和 setter 是这样的):
public class Example extends RealmObject implement Serializable {
@SerializedName("users")
private RealmList<RealmString> users;
public ArrayList<String> getUsers() {
ArrayList<String> array = new ArrayList<>();
for (RealmString rs : users) {
array.add(rs.getValue());
}
return array;
}
public void setUsers(ArrayList<String> users) {
RealmList<RealmString> array = new RealmList<>();
for (String rs : users) {
array.add(new RealmString(rs));
}
this.users = array;
}
}
RealmString 为:
public class RealmString extends RealmObject implements Serializable {
private String val;
//Constructors, getter and setter
}
并添加自定义 Gson 类型转换器以使其正确反序列化:
public class RealmStringRealmListConverter implements JsonSerializer<RealmList<RealmString>>,
JsonDeserializer<RealmList<RealmString>> {
@Override
public JsonElement serialize(RealmList<RealmString> src, Type typeOfSrc,
JsonSerializationContext context) {
JsonArray ja = new JsonArray();
for (RealmString tag : src) {
ja.add(tag.getValue());
}
return ja;
}
@Override
public RealmList<RealmString> deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
RealmList<RealmString> tags = new RealmList<>();
JsonArray ja = json.getAsJsonArray();
for (JsonElement je : ja) {
if (je.isJsonPrimitive()) {
tags.add(new RealmString(je.getAsString()));
}
}
return tags;
}
}
好吧,现在我们开始感觉到 Realm 开始对我们的代码产生很大的影响。但这是一个附带问题,主要问题是 Example 不再可序列化:RealmList 不再可序列化。
所以我尝试使 RealmList 成为瞬态,并使其挂起列表可以用 @Ignore 进行注释,并在序列化后重新创建 RealmList。但 Realm 不接受瞬态。
现在感觉有点卡住了Example
通过我的代码的许多部分中的意图传递(它是很多类的成员)。我不想使用 id 并到处查询它。
我的问题是:
我怎样才能以允许我做的方式改变“Example”new Bundle().putSerializable("test", new Example());
没有崩溃。
感谢您的帮助!