房间数据库 Table 在插入数据后仍然是空的
Room Database Table is still empty after inserting data
我刚刚完成有关房间数据库的代码实验室课程,但我似乎无法将数据加载到 table。
我已将课程应用到我的项目中。我的项目在 recyclerview 中显示了一堆项目,当用户在 recyclerview 中的一个项目上按下按钮时,它将被添加到在 Room 数据库中创建的 table。
我使用 sqlite db explorer 和设备资源管理器中的文件打开了 Room db。我可以看到数据库已创建以及我要插入的 table,但 table.
中没有数据
这是我的 recyclerview 的 onBindViewHolder
holder.QtyAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Code to build product
new PopulateDB(RoomDatabase.getDatabase(context), product);
}
});
我已经检查并确保产品不为空。
这是用于填充 DB 的 AsyncTask,也在 adpater 中
private static class PopulateDB extends AsyncTask<Void,Void,Void>{
private final CartDao cartDao;
private final Product product;
PopulateDB(RoomDatabase database, Product product){
cartDao = database.CartDao();
this.product = product;
}
@Override
protected Void doInBackground(Void... voids) {
cartDao.insert(product);
return null;
}
}
这是我的 DAO
@Dao
public interface CartDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Product productCart);
@Query("DELETE FROM promotion_cart")
void clearCart();
@Query("SELECT * from promotion_cart")
LiveData<List<PromotionProduct>> getAllPromotionCartItems();
}
我正在尝试在购物车片段中显示此 table 数据,我正在使用此方法在数据准备就绪后显示它。
cartViewModel.getAllCartItems().observe(this, new Observer<List<Product>>() {
@Override
public void onChanged(@Nullable List<Product> products) {
cartAdapter.setProductCartList(products);
}
});
我检查了这个适配器,列表大小为 0。
如果您需要更多信息,请尽管询问,
谢谢你的时间/
new PopulateDB(RoomDatabase.getDatabase(context), product);
您正在创建 AsyncTask
。你永远不会执行它,所以你的 doInBackground()
不是 运行。您可以通过在 doInBackground()
中放置断点或将日志记录添加到 doInBackground()
.
来对此进行测试
要修复它,execute()
你的 AsyncTask
。
此外,请注意,由于您没有使用 onPostExecute()
,与使用任何其他线程解决方案(Thread
、Executor
、RxJava 等)。
我刚刚完成有关房间数据库的代码实验室课程,但我似乎无法将数据加载到 table。
我已将课程应用到我的项目中。我的项目在 recyclerview 中显示了一堆项目,当用户在 recyclerview 中的一个项目上按下按钮时,它将被添加到在 Room 数据库中创建的 table。
我使用 sqlite db explorer 和设备资源管理器中的文件打开了 Room db。我可以看到数据库已创建以及我要插入的 table,但 table.
中没有数据这是我的 recyclerview 的 onBindViewHolder
holder.QtyAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Code to build product
new PopulateDB(RoomDatabase.getDatabase(context), product);
}
});
我已经检查并确保产品不为空。
这是用于填充 DB 的 AsyncTask,也在 adpater 中
private static class PopulateDB extends AsyncTask<Void,Void,Void>{
private final CartDao cartDao;
private final Product product;
PopulateDB(RoomDatabase database, Product product){
cartDao = database.CartDao();
this.product = product;
}
@Override
protected Void doInBackground(Void... voids) {
cartDao.insert(product);
return null;
}
}
这是我的 DAO
@Dao
public interface CartDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Product productCart);
@Query("DELETE FROM promotion_cart")
void clearCart();
@Query("SELECT * from promotion_cart")
LiveData<List<PromotionProduct>> getAllPromotionCartItems();
}
我正在尝试在购物车片段中显示此 table 数据,我正在使用此方法在数据准备就绪后显示它。
cartViewModel.getAllCartItems().observe(this, new Observer<List<Product>>() {
@Override
public void onChanged(@Nullable List<Product> products) {
cartAdapter.setProductCartList(products);
}
});
我检查了这个适配器,列表大小为 0。
如果您需要更多信息,请尽管询问, 谢谢你的时间/
new PopulateDB(RoomDatabase.getDatabase(context), product);
您正在创建 AsyncTask
。你永远不会执行它,所以你的 doInBackground()
不是 运行。您可以通过在 doInBackground()
中放置断点或将日志记录添加到 doInBackground()
.
要修复它,execute()
你的 AsyncTask
。
此外,请注意,由于您没有使用 onPostExecute()
,与使用任何其他线程解决方案(Thread
、Executor
、RxJava 等)。