У меня есть следующий код, и мне было интересно, почему оно вылетает из приложения, я надеялся, что вы поможете мне выяснить, что происходит.
Приведенный ниже код не является точным, кроме кода счетчика.
Идея состоит в том, чтобы массив spinner racePicker заполнялся идентификаторами документов FireStore, как показано ниже:
val db = FirebaseFirestore.getInstance()
val raceArray = ArrayList()
raceArray.add("Select race...")
db.collection("races").get().addOnSuccessListener {
DocumentSnapshot ->
for (document in DocumentSnapshot) {
raceArray.add(document.id)
Log.e("info", "raceArray contains values $raceArray")
}
Это грубое приближение. Возможно, я установил его .toString () или использовал .addAll против .add в выражении raceArray.
(Я, честно говоря, точно не помню, точно ли я так его кодировал, но он достаточно близок, чтобы датьидея, я набираю из памяти в данный момент).
Я намеревался использовать это так:
racPicker.onSelectedItemListener = object :
OnItemSelectedListener {
override fun onNothingSelected() {
}
override fun onItemSelected(parent: AdapterView<*>?, view:
View?, position: Int, id: Long) {
val selection = parent?.getItemAtPosition(position).toString()
when (selection) {
"$selection" -> raceArray.remove("Select race...").also{
statAllocator(selection) }
}
}
}
По какой-то причине он падает, но если я назначаю литералтакие как «имя расы» -> веселье, «имя второй расы» -> веселье и т. д. это работает.
Было бы лучше использовать вместо него
if (selectedItem.equals("$selection") {
// do stufd
}
? Или это абсолютно необходимо называть каждый раз, когда case / оператор в виде литеральной строки? По сути, я ищу способ получить выбранный элемент счетчика (который представляет собой массив имен документов, сгенерированный из базы данных FireStore), а затем «проверить себя» и вызвать другие функции.