如何避免使用Realm insertOrUpdate / copyToRealmOrUpdate更新空值?

时间:2016-07-26 13:49:04

标签: android realm

场景1:我创建了具有服务器响应的Realm Db(将JSON响应转换为具有值id(PK)和名称的UserRealmModel列表)并执行操作copyToRealmOrUpdate(list_of_realmresult)。它第一次工作正常。

场景2:现在,当我第二次从服务器获得响应时,我为某些用户获取空值,并再次执行copyToRealmOrUpdate(list_of_realmresult)操作,并将这些名称设为null,以获得所谓的id。

现在我想避免对来自服务器端的那些空值进行更新操作。如何使用copyToRealmOrUpdate / insertOrUpdate方法实现此目的。

2 个答案:

答案 0 :(得分:1)

您可以使用@Required注释这些字段。

  

必填字段和空值

     

在某些情况下,null不是字段的适当值。 @Required注释可用于告诉Realm强制执行检查以禁止空值。

来自the docs

如果尝试使用空值更新必填字段,则会引发异常。我不知道哪一个,但我认为你很容易找到它。

答案 1 :(得分:1)

copyToRealmOrUpdate()会覆盖原始对象。

您必须自己手动管理合并。

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        UserRealmModel userModel = realm.where(UserRealmModel.class).equalTo("id", id).findOne();
        if(userModel == null) {
            // create and save new
        } else {
            // merge non-null fields
        }
        realm.copyToRealmOrUpdate(userModel);
    }
});