gpt4 book ai didi

java - 将 Realm 与 Gson 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:04 24 4
gpt4 key购买 nike

我有 json 字段 _id

 String json = "{ _id : 1, name : 'Alex', role: 'admin' }"

在我的 Realm 模型中,我使用 @SerializedName 属性:

public class User extends RealmObject {

@SerializedName("_id")
@PrimaryKey
private int id;
private String name;
private String comment;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

}

如果尝试保存 json:

realm.createOrUpdateObjectFromJson(User.class, json)

字段 _id 无法解析并且在数据库中创建了 id = 0 的记录

在使用 @SerializedName 属性的文档中

  Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}

@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}).create();


User user = gson.fromJson(json, User.class);
realm.beginTransaction();
realm.copyToRealmOrUpdate(user);

在这种情况下,json = "{ _id : 1, role: 'user' }" 只需从数据库中删除用户 name,因为 String 的默认值为 null。

所以,可能我错误地使用了该属性。处理json保存方法(createOrUpdateObjectFromJson等)时如何考虑属性?

最佳答案

既然可以制作 GsonRealm 只需一行代码即可协同工作?

IMO,为我们要序列化的每个模型设置独占策略并不是最好的方法。正如您已经意识到的那样,这种方法需要编写大量样板代码,这容易出错,最糟糕的是,杀死了Gson 是关于(这让我们的生活不那么痛苦)。

既然我们正在解决不兼容问题,您为什么不确保将未管理的 RealmObject 传递给您的 Gson 序列化程序?

有史以来最简单的解决方案(IMO)

找到 here .在内存中获取托管 RealmObject 的副本并将其传递给 Gson

new Gson().toJson(realm.copyFromRealm(managedModel));

就是这样!无需再编写代码!

其他好的解决方案和解释是 posted here.

关于java - 将 Realm 与 Gson 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35310688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com