为什么这段代码会触发java.lang.IllegalArgumentException: RealmObject is not valid, so it cannot be copied
错误?
realm.beginTransaction();
realm.delete(Booking.class);
final Booking booking = realm.copyFromRealm(
new Booking(
editFragment.getDestination(),
editFragment.getDate()));
realm.commitTransaction();
但是,如果将其更改为此,则不会引发异常:
realm.delete(Booking.class);
final Booking booking = realm.createObject(
Booking.class,
UUID.randomUUID().toString());
booking.setDestination(editFragment.getDestination());
booking.setDate(editFragment.getDate());
有什么区别?
Booking
类的定义为:public class Booking extends RealmObject {
@Required
@PrimaryKey
private String id;
@Required
private String destination;
@Required
private Date date;
private int status;
private boolean isNotified;
public Booking() {
this.id = UUID.randomUUID().toString();
this.status = STATUS_UNAVAILABLE;
}
public Booking(String destination, Date date) {
this();
this.destination = destination;
this.date = date;
}
// Getters and setters follow
}
编辑:
发现问题所在:我不小心使用了
copyFromRealm
而不是copyToRealm
。如果您不够细心,似乎自动完成有时会对您不利。 最佳答案
您必须将有效的RealmObject传递到copyFromRealm(..)中,不足以动态创建新实例,因为新对象不会附加到Realm。
制作已持久保存的{@link RealmObject}的独立的内存中副本。
在第二个示例中,您将创建一个新对象并将其传递给要持久化的数据库:这是两个非常不同的操作。