2015-08-27 15 views
11

voglio "staccare" un RealmObject dalla sua Realm, nel senso che voglio essere in grado di restituire un RealmObject da un metodo e di essere in grado di usarlo dopo aver close il Realm istanza.Staccare RealmObject da Realm/Convert è riuscito RealmObject a non gestito oggetto

Qualcosa di simile a questo:

public Person getPersonWithId(final Context context, final String personId){ 
    Realm realm = Realm.getInstance(context); 
    Person person = realm.where.....; 
    realm.close(); 
    return person; 
} 

Attualmente getPersonWithId(mContext, personId).getName() restituirà un errore, come previsto.

Avere un oggetto gestito significherà anche che l'oggetto è immutabile (non può essere modificato) e quindi qualsiasi metodo che aggiorna l'oggetto come person.setName(String name) avrà esito negativo a causa dell'oggetto oggetto gestito.

Vorrei che ci sarebbe stato un metodo come Person person = person.detachFromRealm();

Qualcuno sa una soluzione/soluzione per questo problema?

risposta

20

Realm Android ora supporta il collegamento e la rimozione dell'oggetto realm. Così si può fare in questo modo:

RealmObject objectCopy = realm.copyFromRealm(RealmObject object); 

Ecco i dettagli dalla documentazione:

Le istanze di oggetti Realm può essere gestiti o non gestiti.

Gli oggetti gestiti sono persistenti in Reame, sono sempre aggiornati e il thread limitato. Sono generalmente più leggeri rispetto alla versione non gestita in quanto occupano meno spazio sull'heap Java.

Gli oggetti non gestiti sono come gli oggetti Java ordinari, non sono protetti e non verranno aggiornati automaticamente. Possono essere spostati liberamente attraverso i thread.

È possibile convertire tra i due stati che utilizzano Realm.copyToRealm() e Realm.copyFromRealm()

3

C'è una richiesta di funzionalità per questo here. Non c'è una vera grande soluzione per questo, solo soluzioni alternative.

A soluzione alternativa consiste nel copiare manualmente i dati da un oggetto a un altro. Il mio RealmObjects ha tonnellate di campi per cui copiare manualmente le proprietà da un oggetto a un altro è un NO GO.

Invece di scrivere manualmente "codice di copia" ho deciso di utilizzare MapStruct. Ecco un progetto sandbox con Realm e MapStruct. Sembra funzionare bene, almeno per i modelli semplici.

+3

Questa non è una risposta, ma i dettagli aggiuntivi per la tua domanda. Vuoi gentilmente modificare la tua domanda per includerla e quindi rimuovere questa "risposta?" Grazie! – 323go

+1

Penso che questa sia una risposta valida, dato che risponde alla domanda "Qualcuno conosce una soluzione/soluzione alternativa per questo problema?". Presenta una soluzione possibile e fornisce alcuni contesti sul progetto che ha una richiesta di funzionalità su questo. – Thermometer

+1

Puoi rimuovere questa come risposta accettata, la richiesta di funzionalità è stata implementata: https://github.com/realm/realm-java/pull/1849 –

Problemi correlati