【发布时间】:2020-07-19 13:07:13
【问题描述】:
我有一个包含 5 列(Day、Likes、Dislikes、plays、Blocked)的 SQLite Room Database。我已经在数据库中手动填充了 8 行数据。
我想从数据库中检索特定日期的特定数据。所以我需要第 6 天(或 1、2、3、4 ......)的喜欢(或不喜欢、播放......)的数量
我尝试创建必要的 Dao、Repository 和 ViewModel 方法,但它们似乎是错误的,因为当我在 MainActivity 中调用它时,它给了我 0 作为返回值。
数据库示例:
@Database(entities = Recovery.class, version = 1, exportSchema = false)
public abstract class RecoveryDatabase extends RoomDatabase {
private static RecoveryDatabase INSTANCE;
public abstract RecoveryDao recoveryDao();
// Singleton
public static RecoveryDatabase getInstance(final Context context) {
if (INSTANCE == null) {
synchronized (RecoveryDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), RecoveryDatabase.class, "recovery_database").fallbackToDestructiveMigration().allowMainThreadQueries().addCallback(roomCallback).build();
}
}
}
return INSTANCE;
}
private static RecoveryDatabase.Callback roomCallback = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
new PopulateDbAsyncTask(INSTANCE).execute();
}
};
private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
private RecoveryDao recoveryDao;
private PopulateDbAsyncTask(RecoveryDatabase db) {
recoveryDao = db.recoveryDao();
}
@Override
protected Void doInBackground(Void... voids) {
recoveryDao.insert(new Recovery(1,22,9,2,3));
recoveryDao.insert(new Recovery(2,23,8,3,4));
recoveryDao.insert(new Recovery(3,56,6,4,5));
recoveryDao.insert(new Recovery(4,34,4,2,2));
recoveryDao.insert(new Recovery(5,76,2,7,9));
recoveryDao.insert(new Recovery(6,10,1,4,7));
recoveryDao.insert(new Recovery(7,27,6,7,3));
recoveryDao.insert(new Recovery(8,46,7,1,5));
return null;
}
}
}
【问题讨论】:
标签: android android-studio android-sqlite android-room dao