2014-12-01 2 views
6

Я новичок в Realm для Android, поэтому я не уверен, что подхожу к этому правильно. У меня есть класс, который выглядит следующим образом:RealmObject AND Parcelable

public class Entry extends RealmObject implements Parcelable { 
    ... 
} 

Проблема является интерфейс Parcelable содержит такие методы, как describeContents()writeToParcel() и RealmObjects не должны иметь отличные добытчиками методы и сеттеры:

Error:(81, 17) error: Only getters and setters should be defined in model classes 

Так мой вопрос: как я могу объединить эти две работы? Есть ли лучший способ, чем создание отдельного класса (может быть, что-то вроде RealmEntry)? Это приведет к большому дублированному коду ...

+0

Почему вы пытаетесь использовать Parcelable objects and Realm? – Orgmir

+1

Ну, я использую Pareclable для сохранения объектов при изменении конфигурации (повороты устройств) и Realm для хранения объектов на db – feresr

ответ

4

Теперь есть другой обходной путь для этого: просто реализовать интерфейс RealmModel вместо простирающийся от RealmObject:

@RealmClass 
public class User implements RealmModel { 

} 

Вы можете найти более подробную информацию в Realm Documentation.

+0

Но полезно ли использовать доступные объекты для хранения данных? – aleien

+1

обратитесь к этому ответу: http://stackoverflow.com/questions/8896751/android-store-a-parcelable-object-in-sqlite –

0

В настоящее время невозможно реализовать Parcelable в RealmObjects. Одно из решений заключается в использовании двух Realm файлов: Значение по умолчанию один в качестве хранилища объектов и специализированную для временного сохраняет для вращений и т.д.

8

UPDATE мая 2016: Это ответ теперь устаревают, если вы уже не используете Parceler. Решение Хенрике де Соузы намного лучше.


Собственно, есть обходное решение. Вы можете получить желаемый результат, если хотите использовать стороннюю библиотеку (Parceler) для поколения Parcelable. См. my answer to this other question, приведенный ниже для удобства.

С 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.

Смежные вопросы