package com.app.names.db; import android.arch.persistence.room.Room; import android.content.Context; import android.util.Log; import com.app.names.App; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import static com.app.names.db.AppDatabase.DATABASE_NAME; public class DB { private static final String TAG = DB.class.getSimpleName(); private AppDatabase mAppDataBase; private static class Holder { private static final DB INSTANCE = new DB(); } public static DB getInstance() { return Holder.INSTANCE; } private DB() { //call method that check if database not exists and copy prepopulated file from assets copyAttachedDatabase(App.getAppContext(), DATABASE_NAME); mAppDataBase = Room.databaseBuilder(App.getAppContext(), AppDatabase.class, DATABASE_NAME).build(); } public AppDatabase getDB() { return mAppDataBase; } private void copyAttachedDatabase(Context context, String databaseName) { final File dbPath = context.getDatabasePath(databaseName); // If the database already exists, return if (dbPath.exists()) { return; } // Make sure we have a path to the file dbPath.getParentFile().mkdirs(); // Try to copy database file try { final InputStream inputStream = context.getAssets().open(databaseName); final OutputStream output = new FileOutputStream(dbPath); byte[] buffer = new byte[8192]; int length; while ((length = inputStream.read(buffer, 0, 8192)) > 0) { output.write(buffer, 0, length); } output.flush(); output.close(); inputStream.close(); } catch (IOException e) { Log.d(TAG, "Failed to open file", e); e.printStackTrace(); } } }
How to copy database from assets folder with Room Persistence Library for Android
Комментарии: 0
During migration from pardom's ActiveAndroid ORM to Room for Android from Google I came across the following problem. If I have prepopulated database, how can I initialize it from db file located inside assets folder in my project. Fortunately there is a simple solution (some code was copied from ActiveAndroid sources).