如何在Bundle中传递RealmObject?

4
如何通过Intents Bundle传递RealmObject?是否有一种方法将RealmObject写入parcel?出于某些原因,我不想使用Serializable。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Biraj Zalavadia
你不能这样做:"RealmObjects与一个Realm紧密绑定,因此必须使用realm.createObject()实例方法从Realm实例化。" 使用单例模式也不是一个好主意。 - Dawid Hyży
3个回答

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
根据Realm Java文档,您无法在Realm Model类中实现Parcelable。
请注意,由于生成的代理类将覆盖RealmObjects的getters和setters,因此任何您添加到getters和setters的自定义逻辑实际上不会被执行。
但有一个解决方法可以适合您,即实现Parceler Library,您将能够在活动和片段之间发送对象。
请查看Realm Github上的已关闭问题。 其中一个答案展示了如何在Realm中使用Parceler,需要在@Parcel注释上设置自定义参数。

-1

让你的 RealmObject 实现 Parcelable,这里是一个典型的实现方式,来自开发者文档

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();
     }
 }

2
我不认为这是正确的方法,因为 Realm 文档中说:“RealmObjects 与一个 Realm 强烈绑定,因此必须使用 realm.createObject() 实例方法从 Realm 实例化。”http://realm.io/docs/java/0.72.0/#models - x-treme
1
你必须在Realm中使用Serializable而不是Parcelable。 - Bob
@boban0987,我们如何使用Serializable?和普通对象一样使用吗?还是Realm对象需要特殊处理? - Shahar
@boban0987,非常好用!谢谢。 - Shahar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接