我是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”错误。任何人都可以在此过程中告知我在哪里做错了什么?
非常感谢这里的好心人!
答案 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()
做一个。