2014-12-01 15 views
6

Sono nuovo di Realm per Android, quindi non sono sicuro che mi sto avvicinando a questo nel modo giusto. Ho una classe che assomiglia a questo:RealmObject AND Parcelable

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

Il problema è l'interfaccia Parcelable contiene metodi come describeContents()writeToParcel() e RealmObjects non dovrebbero avere metodi diversi da getter e setter:

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

Così la mia domanda è: come posso far funzionare questi due insieme? C'è un modo migliore di creare una classe separata (forse qualcosa come RealmEntry)? Ciò comporterebbe un sacco di codice duplicato ...

+0

Perché stai cercando di utilizzare oggetti e regno di Parcelable? – Orgmir

+1

Bene, utilizzo Pareclable per conservare gli oggetti in caso di modifiche alla configurazione (rotazione dei dispositivi) e Realm per archiviare oggetti su un db – feresr

risposta

4

Ora c'è una soluzione diversa per questo: basta implementare l'interfaccia RealmModel invece che si estende da RealmObject:

@RealmClass 
public class User implements RealmModel { 

} 

È possibile trovare maggiori informazioni nel Realm Documentation.

+0

Ma è una buona idea usare oggetti parcelabili per memorizzare i dati? – aleien

+1

fare riferimento a questa risposta: http://stackoverflow.com/questions/8896751/android-store-a-parcelable-object-in-sqlite –

0

Al momento non è possibile implementare Parcelable su RealmObjects. Una soluzione è quella di utilizzare due file regno: la predefinite uno come oggetto di archivio e uno specializzato per temporaneo salva per rotazioni ecc

8

UPDATE maggio 2016: Questa è la risposta è ormai obsoleti a meno che non si utilizza già Parceler. La soluzione di @Henrique de Sousa è molto meglio.


In realtà, c'è una soluzione alternativa. Puoi ottenere il risultato desiderato se sei disposto a utilizzare una libreria di terze parti (Parceler) per la generazione Parcelable. Vedi my answer to this other question, citato di seguito per comodità.

Con Parceler v0.2.16, si può fare questo:

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

Poi, utilizzare Parcels.wrap(Feed.class, feed) invece di Parcels.wrap(feed) ovunque, altrimenti la vostra applicazione si bloccherà con org.parceler.ParcelerRuntimeException: Unable to create ParcelableFactory for io.realm.FeedRealmProxy.

Problemi correlati