为什么这段代码会触发
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
。如果你不够小心,看起来像自动填充有时会对你不利哈哈。
答案 0 :(得分:3)
您必须将有效的RealmObject传递给copyFromRealm(..)即时创建新实例是不够的,因为新对象不会附加到Realm。
制作已持久 {@link RealmObject}的独立内存副本。
在第二个示例中,您将创建一个新对象并将其传递给要保留的数据库:这是两个非常不同的操作。