Каков наилучший способ добавить данные в комнате при запуске? - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу добавить несколько строк (около 180) в мою базу данных при первом запуске приложения. Я нашел некоторый учебник с Executors.newSingleThreadExecutor(), как https://android.jlelse.eu/pre-populate-room-database-6920f9acc870. Но есть ли другие способы предварительно заполнить базу данных?

AppDatabase.class

@Database(entities = {Country.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase INSTANCE;

    public abstract CountryDao countryDao();

    public synchronized static AppDatabase getInstance(Context context) {
        if (INSTANCE == null)
            INSTANCE = buildDatabase(context);
        return INSTANCE;
    }

    private static AppDatabase buildDatabase(final Context context) {
        return Room.databaseBuilder(context, AppDatabase.class, "countries").allowMainThreadQueries().addCallback(new Callback() {
            @Override
            public void onCreate(@NonNull SupportSQLiteDatabase db) {
                super.onCreate(db);
                Executors.newSingleThreadExecutor().execute(new Runnable() {
                    @Override
                    public void run() {
                        getInstance(context).countryDao().insertAll(Country.populateData());
                    }
                });
            }
        }).build();
    }
}

1 Ответ

0 голосов
/ 30 апреля 2018

Нет.

Если вы создаете новую базу данных, есть только один способ предварительно заполнить базу данных - это регистрация этого обратного вызова и переопределение onCreate(SupportSQLiteDatabase db) метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...