Sto provando a creare un database per la mia applicazione Android usando Realm. Devo avere i dati che sono pre-compilati quando l'app è installata. L'impostazione di una migrazione del reame come parte di RealmConfiguration non viene eseguita quando la versione del database è 0 (il valore predefinito è 0 inizialmente). Come posso aggiungere i dati al primo avvio dell'applicazione?Come posso creare un database di Realm con dati iniziali per la mia app per Android?
risposta
Quello che sto facendo adesso è quello di verificare se questa è la prima volta che la mia app è installata e creare un nuovo oggetto.
if (Preferences.freshInstall(getApplicationContext())) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
Category inbox = new Category("Inbox", "#445566");
realm.copyToRealm(inbox);
realm.commitTransaction();
Preferences.notNew(getApplicationContext());
}
Ci dovrebbe essere un modo migliore per fare questo usando Realm Migrazioni
Realm Java 0.89 ha introdotto un metodo che permette di specificare una transazione per essere eseguito quando viene creato un database di Realm per la prima volta. Questo metodo, RealmConfiguration.Builder.initialData(Realm.Transaction transaction)
, viene chiamato come parte dell'impostazione di RealmConfiguration Builder.
Per esempio
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name("myrealm.realm")
.initialData(new MyInitialDataRealmTransaction()),
.build();
L'impostazione iniziale delle transazioni di dati, come mostrato dalla @Benjamin nel Regno Java funziona! Spero solo che fosse presente anche in Realm Cocoa.
Ho creato un problema per questo, nel tracker Github here, #3877.
Le migrazioni non sono pensate per pre-compilare il database. Tenere traccia di un valore booleano nelle preferenze è probabilmente la più facile da fare se non si desidera spedire un file pre-popolato con l'app. Detto questo, aggiungere un modo per fornire dati la prima volta che viene creato un ream sembra un caso d'uso che potremmo supportare meglio. –