似乎RalmObject在传递给其他RealmObject的构造函数时将其字段设置为默认值(请查看下面代码中的注释)。简单的解决方法是在创建对象后不将对象传递给构造函数并分配字段。但实际上我并不了解它是如何实现的。所以我的问题是:有人可以解释一下发生了什么吗?在其他情况下,我应该在使用Realm时注意这样的行为?
再现问题的简单代码示例:
realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Stock stock1 = new Stock();
stock1.id = "stock1";
managedStock = realm.copyToRealm(stock1);
}
});
//output here: managedStock.id = stock1
Log.d("myLogs", "managedStock.id = " + managedStock.id);
Goods goods = new Goods(managedStock);
在通过managedStock传递的Goods对象的构造函数中,id == null,这有可能吗?
public class Goods extends RealmObject {
@PrimaryKey
public String id;
public Stock stock;
public Goods() {}
public Goods(Stock s) {
//output here: s.id == null
Log.d("myLogs", "s.id == " + s.id);
}
}
和Stock对象,以防万一
public class Stock extends RealmObject {
@PrimaryKey
public String id;
public String name;
}
一些额外的信息:领域1.2.0,Android 5.0,设备三星Galaxy S4
提前致谢!
答案 0 :(得分:1)
这听起来像是一个Realm Transformer问题,所以我在realm-java github issues上提出了一个问题。
与此同时,我建议使用getter / setter而不是直接字段访问。