Android 领域 - 主键约束异常和重复

Android Realm - Primary Key Constraint Exception & Duplication

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

我正在从我的 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();
  }
}

我的理解是,如果 primaryKey 存在于 Realm table 上,它只会更新对任何 setter() 的更改,但现在我遇到了 "io.realm.internal.Table.throwDuplicatePrimaryKeyException" 错误。谁能告诉我一路上哪里做错了什么?

非常感谢这里的好心人!

为什么会有这条线?

 object.setPrimaryId(primaryId);

我假设信息是 jsonFile 的一部分,并且您在那里设置的主键可能与已经存在的主键冲突。

我认为你应该更换这个

 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() 在某个地方做一个。