java - Android Room - 无法在数据库中找到已插入的对象
问题描述
所以我写了方法来检查房间数据库中是否已经添加了项目:
if(!CheckifExisits(item)){
itemViewModel.addItem(item);
}else{
Log.e(TAG, "getPrice: Item Already Exists");
context.runOnUiThread(() -> Toast.makeText(context, "Item is already added", Toast.LENGTH_LONG).show());
}
private boolean CheckifExisits(Item itemOutSide){
Exists = false;
itemViewModel.getAllItem().observeForever(items -> {
if (items != null) {
for (Item item: items){
if(item.getUrl().equals(itemOutSide.getUrl())&&item.getName().equals(itemOutSide.getName())){
Exists = true;
break;
}
}
}
});
return Exists;
}
现在我们第一次添加项目没有任何反应,项目被正常添加到数据库中,在我再次单击添加按钮后,该方法工作正常,我收到消息说项目已经在数据库中,但是当我关闭应用程序并重新打开它,它不仅无法检测到已经在数据库中,而且即使该项目已经在数据库中,它也会像新项目一样重新添加!
怎么会这样?我该如何解决?
解决方案
我认为这与数据库无关。尝试用以下代码替换您的代码:
private boolean CheckifExisits(Item itemOutSide){
Exists = false;
itemViewModel.getAllItem().observeForever(items -> {
if (items != null) {
for (Item item: items){
if(item.getUrl().compareTo(itemOutSide.getUrl()) == 0 && item.getName().compareTo(itemOutSide.getName()) == 0){
Exists = true;
break;
}
}
}
});
return Exists;
}
Equals 用于比较对象,我认为您想比较字符串的内容。见这里。
推荐阅读
- c++ - Makefile 中的自动依赖生成:未定义对“main”的引用(混合 conda 通道)
- python - 在 python 中运行测试查询的最佳方式:bash vs default shell
- typescript - Nestjs 编译未反映更改
- firebase - 如何根据环境为 Firebase Cloud Functions 设置变量?
- node.js - 使用 Multer [Nodejs] 将图像上传到 Web 服务器目录
- android - 如何在 Tonyo Francis Fetch 下载器库中使用 Head 请求而不是 GET?
- javascript - 如何在 CustomToolBar 中单击刷新按钮时刷新 MUI DataTable 数据
- r - 在离线 Windows pc 上从 GitHub 安装 bstfun 函数错误具有非零退出状态
- javascript - Webpack 在编译前获取文件
- c++ - QList如何
, QList 在 Qt6 中检索数据?