Невозможно использовать == с livedata и int, как еще я могу проверить?

#android #repository #android-room #android-livedata

#Android #репозиторий #android-комната #android-livedata

Вопрос:

хорошо, итак, у меня есть приложение для Android, и я следил за комнатой андроидов с помощью руководства по просмотру. Мне удалось заставить его работать должным образом с моим recyclerview, чтобы показывать историю всех сыгранных игр. Сейчас я работаю над страницей стиля достижений и хочу проверить, достигнуты ли конкретные результаты.

В моем файле DAO у меня есть следующее;

 @Query("SELECT COUNT(*) from SavedScores WHERE difficulty = :Difficulty AND questioncount = :QuestionCount AND answeredcorrectly =:QuestionCount")
    fun CheckRecordsForTrophy(Difficulty: String,QuestionCount:Int):Flow<Int>
 

Затем в моем репозитории room у меня есть это;

 val easy5: Flow<Int> = savedScoresDao.CheckRecordsForTrophy("Easy",5)
 

В моей модели представления;

 val easy5: LiveData<Int> = repository.easy5.asLiveData()
 

и затем в действии у меня есть следующее;

Перед методом oncreate:

 private val savedScoresViewModel: SavedScoresViewModel by viewModels {
        SavedScoresViewModelFactory((application as ScoreApplication).repository)
    }
 

В методе oncreate:

 var easy5var = savedScoresViewModel.easy5

        savedScoresViewModel.easy5.observe(this) {
            if(easy5var==0){}

    }
 

Я не уверен на 100%, должен ли я выполнять все эти шаги, как я делал, чтобы получить все данные в моем представлении recycler, Но я эффективно выполнил те же шаги, за исключением адаптеров и т. Д., Поскольку я просто пытаюсь понять, соответствуют ли они критериям для данного достижения.

На данный момент в моем репозитории есть жестко запрограммированные элементы для функции, то есть CheckRecordsForTrophy(«Easy»,5), которые я выясню, как установить из действия позже

Проблема, с которой я, похоже, сталкиваюсь, связана с:

 if(easy5var==0){} 
 

Ошибка, которую я получаю, заключается в том, что оператор ‘==’ не может быть применен к ‘LiveData’ и ‘Int’.

Цель: проверить, есть ли в моей таблице результатов запись, где оценка равна количеству заданных вопросов, если это так, я отмечу достижение как завершенное. Я читал, что использование count* в запросе возвращает количество найденных записей, поэтому я могу использовать это, чтобы определить, должны ли они получить достижение или нет. Другими словами, если нет записей, нет достижений.

Комментарии:

1. Можете ли вы опубликовать трассировку стека своей ошибки?

2. @IvanGarza просто для подтверждения вы имеете в виду попытку сборки и совместного использования logcat?

Ответ №1:

Вы сравниваете an Int с a LiveData , когда, вероятно, хотели сравнить int с переданным значением текущих данных.

 var easy5var = savedScoresViewModel.easy5

savedScoresViewModel.easy5.observe(this) { newValue -> // this is what you've missed
    // if(easy5var==0) {} <-- you've made the wrong equality check here
    if (newValue == 0) {} // <-- probably this is what you've meant to do.

}
 

Комментарии:

1. большое вам спасибо. изменил его, как вы предложили, и запустил приложение, и оно правильно идентифицирует количество (чтобы проверить это, я просто вывожу значение в текстовое поле), и после запуска другой игры оно увеличилось, так что ваше изменение было на высшем уровне