使用parceler(@Parcel)和Realm.io(Android)

时间:2014-12-23 13:56:35

标签: android parcelable serializable realm parceler

我有以下代码产生错误:Error:Parceler: Unable to find read/write generator for type io.realm.Realm for io.realm.RealmObject.realm

没有extends RealmObject它工作正常,但我想使用Realm轻松地放入数据库。有没有办法放弃RealmObject字段,只使用@Parcel的基本pojo字段?

@Parcel
public class Feed extends RealmObject{
    int id;
    public String text;
    public String time_created;
    String time_modified;
    int comments_count;
    int likes_count;
    String feed_type;
    int obj_id;
    String image;
    String user_name;
    String user_earthmile_points;
    boolean liked;
    boolean commented;
    boolean is_private;
    String url;
    int feed_creator_id;

   }

2 个答案:

答案 0 :(得分:14)

编辑#2 :实际上,我找到了一种让它工作的方法:)。请参阅下面的更新答案。

编辑#1 :虽然应用编译得很好,但在尝试使用错误Parcel实际创建org.parceler.ParcelerRuntimeException: Unable to create ParcelableFactory for io.realm.FeedRealmProxy时会崩溃。 Realm团队officially acknowledged目前无法在Parcelable上实施RealmObject。目前还不清楚是否/何时解决这个问题。


使用Parceler v0.2.16,您可以执行此操作:

@RealmClass      // required if using JDK 1.6 (unrelated to Parceler issue)
@Parcel(value = Parcel.Serialization.BEAN, analyze = { Feed.class })
public class Feed extends RealmObject {
    // ...
}

然后,在任何地方使用Parcels.wrap(Feed.class, feed)代替Parcels.wrap(feed),否则您的应用会因org.parceler.ParcelerRuntimeException: Unable to create ParcelableFactory for io.realm.FeedRealmProxy而崩溃。

答案 1 :(得分:1)

扩展RealmObject的所有类都将具有由注释处理器创建的匹配的RealmProxy类。必须让Parceler了解这个课程。请注意,在项目至少编译一次之前,该类不可用。

@Parcel(implementations = { PersonRealmProxy.class },
    value = Parcel.Serialization.BEAN,
    analyze = { Person.class })
public class Person extends RealmObject {
// ...}