Android Room-无法在数据库中找到已插入的对象

时间:2018-10-19 19:27:17

标签: java android 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;
}

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

怎么回事?我该如何解决?

1 个答案:

答案 0 :(得分:0)

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

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;
}

等于用于比较对象,我想您想比较字符串的内容。 参见here