copyToRealmOrUpdate不起作用

时间:2016-04-28 12:53:29

标签: android realm rx-java

我想更新一个领域对象,但我没有成功。我尝试了不同的方法,但我仍然得到同样的例外。

Exception

首先,我创建一个工厂,然后我搜索它以便更新。这有效。但是,当我尝试使用新名称更新工厂时,我收到了与主键约束相关的异常。那么,是否应该使用方法copyToRealmOrUpdate来搜索对象的密钥?

private void updatePlantRealm() {

    RealmConfiguration config = new RealmConfiguration.Builder(this)
            .name("garden.realm")
            .build();

    PlantRealmRepository repository = new PlantRealmRepository(config);

    Plant plant = new Plant();
    plant.setId("234");
    plant.setName("test");
    plant.setSize(30);
    plant.setGardenId("1452345");

    repository.add(plant);

    PlantByIdSpecification spec = new PlantByIdSpecification(plant.getId());

    repository.query(spec).subscribe(plants -> {
                Plant p = plants.get(0);
                p.setName("name");
                repository.update(p);
            }
    );

    spec = new PlantByIdSpecification(plant.getId());

    repository.query(spec).subscribe(plants -> {
                Plant p = plants.get(0);
                Assert.assertEquals(p.getName(), "name");
            }
    );
}

更新方法。 ToPlantRealm是一个mapper,它将植物转化为plantRealm。

@Override
public void update(Plant plant) {

    final Realm realm = Realm.getInstance(realmConfiguration);
    realm.executeTransaction(realmParam -> realmParam.copyToRealmOrUpdate(toPlantRealm.map(plant)));
    realm.close();
    deleteDB(realm);
}

ADD方法

@Override
public void add(final Iterable<Plant> plants) {

    realm = Realm.getInstance(realmConfiguration);

    realm.executeTransaction( realmParam -> {
        for (Plant plant : plants) {
            realmParam.copyToRealm(toPlantRealm.map(plant));
        }
    });

    realm.close();
}

此行产生错误

realm.executeTransaction(realmParam -> realmParam.copyToRealmOrUpdate(toPlantRealm.map(plant)));

我在Realm库中进行了调试,它说密钥已经存在。

已更新

Update Realm Failed

1 个答案:

答案 0 :(得分:0)

您的add方法错误。您应该使用copyToRealmOrUpdate代替copyToRealm

@Override
public void add(final Iterable<Plant> plants) {

    realm = Realm.getInstance(realmConfiguration);

    realm.executeTransaction( realmParam -> {
        for (Plant plant : plants) {
            realmParam.copyToRealmOrUpdate(toPlantRealm.map(plant));
        }
    });

    realm.close();
}
相关问题