RealmObject无效,因此无法复制

时间:2016-05-09 07:59:09

标签: android realm

为什么这段代码会触发

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。如果你不够小心,看起来像自动填充有时会对你不利哈哈。

1 个答案:

答案 0 :(得分:3)

您必须将有效的RealmObject传递给copyFromRealm(..)即时创建新实例是不够的,因为新对象不会附加到Realm。

  

制作已持久 {@link RealmObject}的独立内存副本。

在第二个示例中,您将创建一个新对象并将其传递给要保留的数据库:这是两个非常不同的操作。