如何在Java中向RealmList添加对象? Nullpointerexception错误

时间:2016-09-06 21:01:51

标签: realm

我是一名Android开发人员,之前我一直在使用ActiveAndroid和DBFlow,但现在我们有兴趣将Realm数据库实现到我们的新项目中。问题是我在尝试将对象添加到模型中的RealmList时遇到错误。错误是 Nullpointerexception

这是我的国家模型

public class Country extends RealmObject implements Serializable {

@PrimaryKey
private int id;

private String name;
private RealmList<Region> regions;

public Country() {
}

public Country(int id, String name) {
    this.id = id;
    this.name = name;
}
getter and setters...

这是我的区域模型

public class Region extends RealmObject implements Serializable {

@PrimaryKey
private int id;

private String name;

private int countryId;

public RealmList<City> cities;

public Region() {
}

public Region(int id, String name, int countryId ) {
    this.id = id;
    this.name = name;
    this.countryId = countryId;
}
getter and setters...

我尝试保存数据的主要方法是

        Realm realm = Realm.getDefaultInstance();
    realm.beginTransaction();
    for (int i = 0; i < 10 ; i++){
        Country country=new Country();
        country.setId(i);
        country.setName("testCountryName " + i);

        for (int y = 0; y < 3; y++) {
            Region region=new Region();
            region.setId(y);
            region.setName("testRegionName " + y);

            realm.copyToRealmOrUpdate(region);
            country.regions.add(region);
        }

        realm.copyToRealmOrUpdate(country);
    }
    realm.commitTransaction();

最后,当我在每个模型中声明RealmList时,避免Nullpointerexception错误的唯一方法是添加= new RealmList<>();

我在Realm Docs上找不到这个答案,样本从未说过我需要初始化RealmList,因此我在这里寻找解决方案。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

好吧,你正在创建非托管的RealmObjects,它们基本上就是vanilla对象:

Country country = new Country();

Region region = new Region();

考虑到这一点,这里没有魔力,country.regions中的列表从未被任何人初始化:)

所以你需要这个:

country.setRegions(new RealmList<Region>());
region.setCities(new RealmList<City>());

如果您使用realm.createObject(__.class, primaryKeyValue);立即在Realm中创建托管副本,则可以避免手动创建列表(如果我是对的)。

Country country = realm.createObject(Country.class, i);