Как импортировать существующую таблицу SQLite в Android Room?
Я разрабатываю приложение trivia, и я закончил реализацию сохраняемости комнаты в приложении, но у меня возникли проблемы с поиском информации, где я могу импортировать существующую таблицу из файла базы данных SQLite, который я отправляю с приложением.
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