Комната Android - Не удается найти уже вставленный объект в БД - PullRequest
0 голосов
/ 19 октября 2018

Итак, я написал метод, чтобы проверить, добавлен ли уже элемент в базу данных 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 голосов
/ 22 октября 2018

Я не думаю, что это связано с БД.Попробуйте заменить ваш код следующим:

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

Равен используется для сравнения объектов, и я думаю, что вы хотите сравнить содержимое строк.Смотри здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...