主键值不能为null。领域

时间:2015-11-25 15:25:44

标签: java android realm

我使用Realm有一个奇怪的问题,我是新手。我的模型有@PrimaryKey私有String id;字段,当我尝试将模型保存到领域时,我的应用程序因此异常而崩溃。

11-25 10:14:55.014 22175-22175/? D/myTag: false
java.lang.IllegalArgumentException: Primary key value must not be null.

模型名称为Run,以下是我如何使用它。

@Override
public void add(Run run) {
    realm.beginTransaction();

        int lastId;
        RealmResults<Run> all = realm.where(Run.class).findAll();
        if(all.isEmpty())
            run.setId("0");
        else {
            lastId = Integer.parseInt(all.last().getId());
            run.setId(String.valueOf(lastId + 1));
        }
        Log.d("myTag",""+(run.getId()==null));
        realm.copyToRealmOrUpdate(run);

    realm.commitTransaction();
}

我的模特:

public class Run extends RealmObject {
@PrimaryKey
private String id;
private long activeShiftId;
private long storeId;
private int runState;
private RealmList<Order> orders;
private double totalRevenue;
private double creditRevenue;
private long estimatedTime;
...
}

日志说错误。我做错了什么?

java.lang.IllegalArgumentException: Primary key value must not be null.

3 个答案:

答案 0 :(得分:1)

解决这个问题,我忘记了我的Run模型中的我的集合,将id设置为每个项目,现在它可以正常工作。

如果RealmObject中有RealmObject的集合,则应将id(主键)设置为该集合中的每个项目,并将主键设置为外部模型的字段。

答案 1 :(得分:0)

从给定的代码段我可以猜测,在您的模型中, Id 是主键字段(默认情况下不应为null)。这就是为什么它会引起错误。

此行将其设置为null -

  run.setId("0");

尝试根据您的程序逻辑修改此行。

答案 2 :(得分:0)

Realm 0.89.0 字段开始,使用 @PrimaryKey 进行注释,可以为null。 请参阅 CHANGELOG