使用@PrimaryKey初始化Realm对象0(零)在第二个对象上失败
尝试初始化一个简单的Realm对象时,遇到一些奇怪的行为。 我有一个JSONArray,看起来像这样:
[{"id":0,"name":"Biatrix"},{"id":1,"name":"Bill"},{"id":2,"name":"O-ren"}]
我有以下简单的Realm类:
import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; import io.realm.annotations.Required; public class Assassin extends RealmObject { @PrimaryKey private int id; @Required private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
这里是我如何尝试填充类(在Kotlin):
val assassins = viperData.getJSONArray("assassins") for (i in 0..(assassins.length() - 1)) { val item = assassins.getJSONObject(i) var assassin = realm.createObject(Assassin::class.java) assassin.setId(item.getInt("id")) assassin.setName(item.getString("name")) }
第一个id = 0的项目创建的很好,但在第二个项目中我得到一个异常io.realm.exceptions.RealmPrimaryKeyConstraintException: Value already exists: 0
。 然后我想哦,对象是创建公关。 默认值为id = 0,只有后缀才会改变其他值。 它失败了,因为它已经有一个值为0的项目。所以我在类中设置id = -1:
... public class Assassin extends RealmObject { @PrimaryKey private int id = -1; ...
…但仍然得到相同的例外。
这是一个错误还是我在这里错过了什么?
更新
我删除了@PrimaryKey
注释,并正确填充类。 只是为了表明这些值是独一无二的,下面是包含值的领域类(实际值 – 这里没有刺客……)的一个镜头:
从领域文档:
当调用Realm.createObject()时,它将返回一个新的对象,其所有字段都被设置为默认值。 在这种情况下,主键字段为默认值的现有对象可能会发生冲突。 为了避免这种情况,建议创建一个独立的对象,设置字段的值,然后通过copyToRealm()方法将其复制到Realm。
- 如何在我的Realm迁移代码中指定一个盒装字段可以为空?
- 领域executeTransactionAsync不写入数据到数据库
- Realm&Kotlin:DefaultRealmModuleMediator.java – > error:unreachable statement
- 添加Realm类后无法创建Android项目
- 将生成的值添加到RealmObject
- Android的测试在领域的kotlin
- TransformException:java.util.zip.ZipException:重复条目:io / realm / annotations / Ignore.class
- 如何使用Realm的方法与Kotlin
- 运行kotlin realm demo canon