首页 > 解决方案 > 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;
}

现在我们第一次添加项目没有任何反应,项目被正常添加到数据库中,在我再次单击添加按钮后,该方法工作正常,我收到消息说项目已经在数据库中,但是当我关闭应用程序并重新打开它,它不仅无法检测到已经在数据库中,而且即使该项目已经在数据库中,它也会像新项目一样重新添加!

怎么会这样?我该如何解决?

标签: javaandroidandroid-room

解决方案


我认为这与数据库无关。尝试用以下代码替换您的代码:

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 用于比较对象,我认为您想比较字符串的内容。见这里


推荐阅读