【发布时间】:2020-07-18 16:55:35
【问题描述】:
所以我按照 youtube 上的教程创建了一个房间数据库。我有两列 day 和 likes,每个都持有 int 的。目前我已经用三行数据手动填充了数据库。
这里是手动填充数据库的代码:
@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().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) {
// First input is the day and the second is the num of likes for that day
recoveryDao.insert(new Recovery(6,1));
recoveryDao.insert(new Recovery(7,2));
recoveryDao.insert(new Recovery(8,3));
return null;
}
}
}
在我的 Dao 类中,我目前有 Insert、Update、deleteAll 和 getAll... 方法。 这是道:
@Dao
public interface RecoveryDao {
@Insert
void insert(Recovery recovery);
@Update
void update(Recovery recovery);
@Query("DELETE FROM recovery_table")
void deleteAllRecovery();
// Sends data from ascending day to the call. (1,2,3,4 ....)
@Query("SELECT * FROM RECOVERY_TABLE ORDER BY day ASC")
LiveData<List<Recovery>> getAllRecovery();
}
现在,我想从 Room 数据库中检索基于日期的数据。所以我想要第 6 天的点赞数,即 1。我想检索数据并将其存储到 mainActivity 中的 int 变量中。
所以我的最终目标是在数据库中有很多行数据并将其检索并存储到 ArrayList 中,但我必须首先弄清楚如何检索数据。
我已经尝试了很多来自 stackover flow 的解决方案,但我还没有弄清楚。 YT 上的所有教程都使用 Recycler 视图和适配器,但我不会使用它们。 我对 sqlite 和 MVVM 很陌生。谢谢你的帮助!!!
【问题讨论】:
-
我猜你需要写一个查询来获取数据。访问数据的链接:developer.android.com/training/data-storage/room/… 查看此链接以帮助获取特定数据,例如一天(在您的情况下为第 6 天):developer.android.com/training/data-storage/room/…
-
RecoveryDao 里面有什么属性?
标签: android mvvm android-sqlite android-room