我有一个具有以下结构的用户Json,我使用Gson和Realm来保存它。
public void displayTable(){
System.out.print(" 1 2 3 4 5 6 7 8 9 10" +
"\n ----------------------------------------");
for(int factorNumberDown = 1; factorNumberDown < 11; factorNumberDown++)
{
System.out.printf("\n%1s%s", factorNumberDown, "| ");
for(int factorNumberAcross = 1; factorNumberAcross <11; factorNumberAcross++)
{
System.out.printf("%4s", factorNumberDown*factorNumberAcross + " ");
}
}
}
我的用户对象是:
{
"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
}
}
每次更改某些权限时,我都会向用户json发出新请求,因此我调用此代码:
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
}
如果用户ID保持不变,则更新相同的域用户,但每次调用此代码时,都会创建一个新的Permission对象。还有一种方法可以使用Gson更新Permission子对象吗?
答案 0 :(得分:0)
Realm Just Check the PrimaryKey以查看对象是否存在, 在插入对象之前 首先为您的对象设置PrimaryKey
Permissions item = realm.where(Permissions.class).equalTo("permisionOne", permisionOne).equalTo("permisionTwo", permisionTwo).equalTo("permisionThree", permisionThree).findFirst();
if(item != null)
user.getPermissions().setId(item.id)
然后尝试你的代码。如果id存在,Realm会尝试更新它
答案 1 :(得分:0)
如果您确定每个Permissions
属于单User
,则可以在更新User
之前将其删除。
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) {
User existingUser = realm.where(User.class).equalTo("id", user.gtId()).findFirst();
if (existingUser != null) {
existingUser.getPermisions().deleteFromRealm();
}
realm.insertOrUpdate(user);
}
});