我是一名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,因此我在这里寻找解决方案。
请帮我解决这个问题。
答案 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);