【发布时间】:2017-06-12 21:05:59
【问题描述】:
我有一个具有以下结构的用户 Json,我正在使用 Gson 和 Realm 来保存它。
{
"id": 2204,// this id is unique
"name": "Test Name",
"session_token": "someexmapletoken",
"account_id": 1,
"account_name": "S",
"permissions": {
"permision_one": true,
"permision_two": true,
"permision_tree": false
}
}
我的用户对象是:
public class User extends RealmObject {
@SerializedName("id")
@Expose
@PrimaryKey
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("session_token")
@Expose
private String sessionToken;
@SerializedName("account_id")
@Expose
private Integer accountId;
@SerializedName("account_name")
@Expose
private String accountName;
@SerializedName("permissions")
@Expose
private Permissions permissions;
//omitted getters and setters
}
public class Permissions extends RealmObject{
@SerializedName("permision_one")
@Expose
private Boolean permisionOne;
@SerializedName("permision_two")
@Expose
private Boolean permisionTwo;
@SerializedName("permision_tree")
@Expose
private Boolean permisionTree;
//omitted getters and setters
}
每次某些权限更改时,我都会向用户 json 发出新请求,因此我调用此代码:
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.insertOrUpdate(User);
}
});
如果用户 ID 保持不变,则更新相同的领域用户,但每次我调用此代码时都会创建一个新的权限对象。还有一种方法可以使用 Gson 更新 Permission 子对象吗?
【问题讨论】:
-
为此,
User和Permissions类都需要@PrimaryKey注释字段 -
在我的示例 json 的情况下,我无法从 json 创建主键,有没有办法做到这一点,无需任何 json 修改?
-
user.getPermissions().setId(user.getId()) -
这工作正常但是,用户用户 = gson.fromJson(json, User.class);不再有效,但我会这样做,谢谢!