Android领域 - 主键约束异常&复制

时间:2015-12-04 08:46:48

标签: android primary-key realm

我是Android编程和Realm的新手。找不到任何相关的文章,所以我在这里发布问题..

我正在从我的JSON文件写入Realm,它被记录并反映在RealmBrowser中。但是当我重新启动我的应用时,我在io.realm.exceptions.RealmPrimaryKeyConstraintException: Value already exists: 20151101上收到错误。所有值都直接从我的JSON文件派生,我在for循环中运行它,所有数据都记录在Realm数据库中。

for (int i = 0; i < jsonFile.length(); i++) {
try {

  RealmConfiguration objectDB = new RealmConfiguration.Builder(getContext()).
                                name("objectDB.realm").build();
  Realm realm = Realm.getInstance(objectDB);
  realm.beginTransaction();

  Object object = realm.createOrUpdateObjectFromJson(Object.class, jsonFile);
  object.setPrimaryId(primaryId);

  //and set more more data...

  realm.copyToRealmOrUpdate(object);
  realm.commitTransaction();

  } catch (JSONException e) {
    e.printStackTrace();
  }
}

我的理解是,如果mainKey存在于Realm表中,它只会更新任何setter()的更改,但现在我遇到“io.realm.internal.Table.throwDuplicatePrimaryKeyException”错误。任何人都可以在此过程中告知我在哪里做错了什么?

非常感谢这里的好心人!

2 个答案:

答案 0 :(得分:0)

为什么你有这条线?

 object.setPrimaryId(primaryId);

我认为信息将成为jsonFile的一部分,你在那里设置的主键可能与已经存在的主键冲突。

答案 1 :(得分:0)

我认为你应该替换这个

 Object object = realm.createOrUpdateObjectFromJson(Object.class, jsonFile);
 object.setPrimaryId(primaryId);

 //and set more more data...

 realm.copyToRealmOrUpdate(object);

有这样的东西

 Object object = gson.fromJson(jsonFile, Object.class);
 object.setPrimaryId(primaryId);
 realm.beginTransaction();
 realm.copyToRealmOrUpdate(object);
 realm.commitTransaction();

Gson是Realm的依赖,所以我认为你可以在某个地方Gson gson = new Gson()做一个。