Использование парсера (@Parcel) с Realm.io (Android)
У меня есть следующий код, который выдает ошибку: Error:Parceler: Unable to find read/write generator for type io.realm.Realm for io.realm.RealmObject.realm
Работало все нормально без extends RealmObject
Однако я хочу использовать Realm, чтобы легко поместить в базу данных. Есть ли способ исключить поля RealmObject и просто использовать базовые поля pojo для @Parcel?
@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 ответа
РЕДАКТИРОВАТЬ № 2: На самом деле, я нашел способ заставить его работать:). Смотрите обновленный ответ ниже.
РЕДАКТИРОВАТЬ # 1: Хотя приложение компилируется очень хорошо, оно падает, когда пытается создать Parcel
с ошибкой: org.parceler.ParcelerRuntimeException: Unable to create ParcelableFactory for io.realm.FeedRealmProxy
, Команда Realm официально признала, что в настоящее время невозможно реализовать Parcelable
на RealmObject
s. Неясно, если / когда это будет решено.
С помощью 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
,
Все классы, которые расширяют RealmObject, будут иметь соответствующий класс RealmProxy, созданный процессором аннотаций. Парселер должен быть осведомлен об этом классе. Обратите внимание, что класс недоступен, пока проект не будет скомпилирован хотя бы один раз.
@Parcel(implementations = { PersonRealmProxy.class },
value = Parcel.Serialization.BEAN,
analyze = { Person.class })
public class Person extends RealmObject {
// ...}