Приложение падает, когда я пытаюсь получить динамическое значение в счетчике - PullRequest
1 голос
/ 08 ноября 2019

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

Приведенный ниже код не является точным, кроме кода счетчика.

Идея состоит в том, чтобы массив 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), а затем «проверить себя» и вызвать другие функции.

...