In SQLiteOpenHelper
gibt es eine onCreate(SQLiteDatabase ...)
-Methode, die ich benutzt habe, um Datenbanktabellen mit einigen Anfangsdaten zu füllen.
Gibt es eine Möglichkeit, zuerst einige Daten in die Raumdatenbanktabelle einzufügen? App ausführen?
Sie können Skripts ausführen, nachdem die Datenbank erstellt oder jedes Mal ausgeführt wird, wenn die Datenbank mit RoomDatabase.Callback geöffnet wird. Diese Klasse ist in der neuesten Version der Raumbibliothek verfügbar.
Sie müssen die Methode onCreate und onOpen von RoomDatabase.Callback implementieren und sie zu RoomDatabase.Builder hinzufügen, wie unten gezeigt.
%Vor%Referenz: Ссылка
Ich habe eine Reihe von Möglichkeiten ausprobiert, die jeweils nicht verfügbar sind.
Zuerst habe ich versucht, eine Migrationsimplementierung mit der Methode 'addMigrations' zu Room hinzuzufügen, habe aber festgestellt, dass sie nur während eines Datenbankupgrades ausgeführt wird, aber nicht bei der Erstellung.
Ich habe dann versucht, eine SQLiteOpenHelper-Implementierung mit der Methode 'openHelperFactory' an Room zu übergeben. Aber nachdem ich eine Reihe von Klassen erstellt hatte, um die Zugriffsmodifizierer von Room zu umgehen, gab ich den Aufwand auf. Ich habe auch versucht, die FrameworkSQLiteOpenHelperFactory von Room zu subklassen, aber der Access-Modifikator auf Paket-Ebene seines Konstruktors hat dies nicht unterstützt.
Schließlich habe ich einen IntentService erstellt, um die Daten zu füllen und sie von der onCreate-Methode meiner Application-Unterklasse aufzurufen. Der Ansatz funktioniert, aber eine bessere Lösung sollte die bevorstehende Behebung des von Sinigami an anderer Stelle auf dieser Seite erwähnten Tracker-Problems sein.
Darryl
[Hinzugefügt am 19. Juli 2017]
Das Problem scheint in Room 1.0.0 gelöst zu sein. Alpha 5. In dieser Version wurde ein Rückruf zu RoomDatabase hinzugefügt, mit dem Sie Code beim ersten Erstellen der Datenbank ausführen können. Schau dir an:
Tags und Links android android-room