我确信现在您一定已经找到了解决方案,我将把这个问题留在这里给任何有同样问题的人。
简单的答案是肯定的,您走在正确的道路上。另一种选择是创建一个布尔首选项,并在用户更新应用程序并插入新行后分配相反的值。这意味着您必须编写代码来访问数据库、执行 CRUD 操作以及编辑共享首选项值。
如果您打算插入几行,请使用迁移方法来避免编写太多代码,否则请使用第二种方法。这是我的一个业余项目的示例。
static final Migration MIGRATION_4_5 = new Migration(4, 5) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("INSERT INTO categories (id,type, name, amount, description) "
+ "SELECT NULL, 'expense', 'food', 0, NULL "
+ "UNION ALL SELECT NULL, 'expense', 'transportation', 0, NULL ");
}
};
我在数据库创建中添加了回调,以确保安装当前版本的任何用户也拥有新数据
private static AppDatabase buildDatabase(final Context appContext,
final AppExecutors executors) {
return Room.databaseBuilder(appContext, AppDatabase.class, DATABASE_NAME)
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
executors.diskIO().execute(new Runnable() {
@Override
public void run() {
// Generate the data for pre-population
AppDatabase database = AppDatabase.getInstance(appContext, executors);
List<Category> categories = DataGenerator.generateExpenseCategories();
insertData(database, categories);
}
});
}
})
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5)
.build();
}