#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. большое вам спасибо. изменил его, как вы предложили, и запустил приложение, и оно правильно идентифицирует количество (чтобы проверить это, я просто вывожу значение в текстовое поле), и после запуска другой игры оно увеличилось, так что ваше изменение было на высшем уровне