Realm for Android:将非RealmObject存储在RealmObject中

时间:2016-02-24 14:53:28

标签: java android realm

直接代码。我们有两个班级:

class Rocket extends RealmObject
{
 @PrimaryKey
 private long id;
 private String name;
 private Payload pl;
}

class Payload
{
 private String name;
 private double mass;
}

如何在领域存储火箭?

  1. 我可以手动将Payload序列化为一种String,然后将其与Rocket一起保存。但它很慢。
  2. 我可以从RealmObject扩展Payload并将其保存到表中。但是如果我这样做,我应该在每次删除父Rocket时删除Payload。它绝对不是一个选择,因为模型变得非常混乱和复杂。
  3. 如果需要我可以实现Serializable或Parcelable接口,但我真的需要将我的对象保存到Realm中。

    谢谢。

1 个答案:

答案 0 :(得分:1)

看起来您明显的解决方案(扩展RealmObject)主要关注的是,当您删除父Payload时,您要删除Rocket。不幸的是,级联删除了are not yet supported。您的选择是:

  • 序列化为字符串(请注意,这必须在Rocket对象之外完成)
  • 使Payload扩展RealmObject并为其提供与Rocket个对象相同的主键,然后同时删除它们(通过相同的密钥)

我推荐第二种解决方案,以及类似以下的方法:

private void deleteRocket(long id) {
    realm.where(Rocket.class).equalTo("id", id).findFirst().removeFromRealm();
    realm.where(Payload.class).equalTo("id", id).findFirst().removeFromRealm();
}