Как импортировать существующую таблицу SQLite в Android Room?


Я разрабатываю приложение trivia, и я закончил реализацию сохраняемости комнаты в приложении, но у меня возникли проблемы с поиском информации, где я могу импортировать существующую таблицу из файла базы данных SQLite, который я отправляю с приложением.

1 4

1 ответ:

Кажется, немного поздно, но я решил эту проблему этим решением. перед инициализацией room databse {[4] необходимо скопировать существующий файл SQLite db в каталог/data/data/{your package name}/databases]}

Вы можете использовать этот метод для копирования файла

   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();
}

А затем в вашем классе приложений сделайте следующее:

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();
}

}

В моем случае я инициализирую комнату как зависимость, используя dagger