5 votes

Comment importer une table SQLite existante dans Android Room ?

Je suis en train de développer une application de jeu-questionnaire et j'ai fini d'implémenter Room Persistence dans l'application, mais j'ai du mal à trouver des informations me permettant d'importer une table existante à partir d'un fichier db SQLite que j'envoie avec l'application.

2voto

alireza rahmaty Points 347

Cela semble un peu tard mais j'ai résolu ce problème grâce à cette solution. vous devez copier votre fichier sqlite db existant vers /data/data/{your package name}/databases avant d'initialiser la base de données des chambres

vous pouvez utiliser cette méthode pour copier le fichier

   public static void copyDataBase(Context context, String dbName) throws IOException {

    InputStream myInput = context.getAssets().open(dbName); 
    String outFileName =  "/data/data/"
            +context.getApplicationContext().getPackageName()
            + "/databases/" + dbName;
    File file=new File(outFileName);
    if (file.exists())
        return; 
    OutputStream myOutput = new FileOutputStream(outFileName); 
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);

    } 
    myOutput.flush();
    myOutput.close();
    myInput.close();
}

et ensuite dans votre classe d'application faites ceci :

public class ErrorReporterInit extends Application  {

public static ApplicationComponent applicationComponent;

@Inject
DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector; 

@Override
public void onCreate() {
    super.onCreate();

    try {
        GeneralUtil.copyDataBase(this,"{your existing db file in asset}");
    } catch (IOException e) {
        e.printStackTrace();
    }

    applicationComponent = DaggerApplicationComponent.builder()
            .application(this).build();
    applicationComponent.inject(this);

}

@Override
public void onTerminate() {
    super.onTerminate();
}

}

dans mon cas, j'initialise room comme une dépendance en utilisant dagger

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X