如何在Bundle中发送RealmObject?

时间:2014-10-20 12:53:17

标签: android parcelable realm android-bundle

如何通过Intents Bundle传递RealmObject?有没有办法将RealmObject写入parcel? 我出于明白的原因不想使用Serializable。

3 个答案:

答案 0 :(得分:2)

您无法在Realm模型类中实现Parcelable,如Realm Java Doc中所述

  

请注意,getm和setter将被RealmObjects在后面使用的生成的代理类覆盖,因此您添加到getter&的任何自定义逻辑都将被覆盖。实际上不会执行setter。

但是有一个适合你的工作,实现Parceler Library你将能够跨活动和片段发送对象

在Realm Github https://github.com/johncarl81/parceler/issues/57

上查看此已结束的问题

其中一个答案显示了如何在领域中使用Parceler,有必要在@Parcel注释上设置自定义参数。

答案 1 :(得分:2)

最简单的解决方案是使用Parceler:https://realm.io/docs/java/latest/#parceler

例如:

// All classes that extend RealmObject will have a matching RealmProxy class created
// by the annotation processor. Parceler must be made aware of this class. Note that
// the class is not available until the project has been compiled at least once.
@Parcel(implementations = { PersonRealmProxy.class },
        value = Parcel.Serialization.BEAN,
        analyze = { Person.class })
public class Person extends RealmObject {
    // ...
}

答案 2 :(得分:-1)

制作您的RealmObject工具Parcelable,这是Developers' doc的典型实现:

public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }