2016-03-05 8 views
9

Ho un oggettoRealm Android - Come posso convertire RealmResults in una matrice di oggetti?

public class ArticleList extends RealmObject { 

@PrimaryKey 
private String id; 
private String title; 
private String subtitle; 
private String image; 
private String category; 

} 

Quello che voglio fare è il risultato di Realm e li convertono risultato ArticleList[]

Fetch faccio utilizzando

RealmResults<ArticleList> results = realm.where(ArticleList.class).equalTo("category", "CategoryName").findAll(); 

Cosa devo recuperare fare dopo per ottenere una serie di oggetti?

+3

perché non utilizzare 'RealmResults' direttamente? perché hai bisogno di un'altra struttura dati per conservare i dati? – pskink

+0

È necessario utilizzare 'RealmBaseAdapter' per le visualizzazioni di elenco. Il compilatore – EpicPandaForce

risposta

9

RealmResults ha un metodo toArray() - anche toArray(T[] contents) (notare la catena di ereditarietà RealmResults). È possibile utilizzare questi come segue:

ArticleList[] resultArray = (ArticleList[]) results.toArray(); 

O

ArticleList[] resultArray = results.toArray(new ArticleList[results.size()]); 

Idealmente, che ci si vuole utilizzare RealmResults invece. Questo ti permette di ottenere "free" updates sui tuoi dati, così come tutte le comodità di un List.

+0

si lamenta di tipi incompatibili :(https://s.mail.ru/oRPdhBqpwCrp/img-2016-03-05-15-14-37.png –

+0

@AlexeyK Adam S ha ragione: utilizzare 'RealmResults' invece, se ne hai bisogno per l'adattatore 'ListView', scopri (o scrivi) un adattatore che accetta' RealmResults', proprio come 'android.widget.CursorAdapter' che accetta' Cursore' – pskink

+0

Ho aggiornato mostrando come usare 'toArray() 'metodo Ancora una volta - * questa è probabilmente una cattiva idea * –

21

più semplice per convertire in java ArrayList:

ArrayList<People> list = new ArrayList(mRealm.where(People.class).findAll()); 
+0

Cosa succede se un elemento in People viene eliminato in un thread in background? – EpicPandaForce

+0

Quindi lo sviluppatore deve eliminare quell'oggetto anche nella transazione realm allo stesso tempo – Farhan

+0

Sì , o ricostruire l'array in realm change listener – EpicPandaForce

2

Invece di cercare di convertire in un array, si dovrebbe estendere la classe astratta RealmBaseAdapter da https://github.com/realm/realm-android-adapters per mantenere i risultati in sincronia.

Realm fornisce queste classi come un esempio di come creare un elenco di aggiornamento automatico con RecyclerView o ListView.

+1

@CarlSmith no, non è stato rimosso, hanno appena rimosso il costruttore deprecato,' RealmBaseAdapter' è ancora proprio lì https://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmBaseAdapter.java – EpicPandaForce

+0

Quindi scusa per il mio errore, @EpicPandaForce. Ho cancellato il commento. –

10
List<ArticleList> unmanagedList = realm.copyFromRealm(results); 

Lo farà.