Проход по массиву для получения значений полей документа в хранилище с помощью Android / Kotlin - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу получить доступ к значениям полей моей коллекции, но я не могу сделать это в цикле for.

Я приложил код, который я пробовал, и снимок экрана ниже.

В приведенном ниже коде str - это имя в документе (например, sgjj, как на скриншоте, который получается)

Скриншот базы данных Firestore:

введите описание изображения здесь

Код, который я пробовал:

class HostActivityScreen : AppCompatActivity(),HostAdapter.OnItemCheckListener {
    var currentSelected:ArrayList<String> = ArrayList()
    override fun onItemCheck(item: String) {

        currentSelected.add(item)

    }

    override fun onItemUncheck(item: String) {

        currentSelected.remove(item)

    }
    
  for(str in currentSelected){
    print(str)
    var id: String = ""
    var gamingname:String=""
                mFirestore.collection("AllUsers").document(str).get().addOnCompleteListener(OnCompleteListener<DocumentSnapshot> { task ->
      if (task.isSuccessful) {
          val docs:DocumentSnapshot= task.result!!
          print(docs.getData())
          if(docs!=null){
                    id =task.result!!.data!!.get("gaminguserid").toString()
                   gamingname = task.result!!.data!!.get("gaminname").toString();
                        }

                              }
    })
  }

}

Отображаемая ошибка:

kotlin.KotlinNullPointerException
    at HostActivityScreen$onCreate$1$5.onSuccess(HostActivityScreen.kt:120)
    at HostActivityScreen$onCreate$1$5.onSuccess(HostActivityScreen.kt:31)
    at com.google.android.gms.tasks.zzn.run(Unknown Source)

Строка 120:

id= documentSnapshot.getString("gaminguserid")!!

строка 31:

class HostActivityScreen : AppCompatActivity(),HostAdapter.OnItemCheckListener {

Снимок экрана моего экрана отладки (не входит addonsucesslistener):

введите описание изображения здесь

Ни то, ни другоеприведенного выше кода работает, я вижу, что получено значение str, но оно не входит в цикл addonsuccesslistener или addoncompletelistener. Почему это происходит. Как я могу получить доступ к значениям поля?

1 Ответ

0 голосов
/ 23 февраля 2019

Ниже код, который работает для меня:

mFirestore.collection("AllUsers").document(str).get().addOnSuccessListener(OnSuccessListener<DocumentSnapshot> {documentSnapshot->
  var id: String = ""
  var gamingname:String=""
  if(documentSnapshot.exists()){
        id= documentSnapshot.getString("gaminguserid")!!                                  
        gamingname=documentSnapshot.getString("gaminname")!!
   }else
   {                                      
        Toast.makeText(this@HostActivityScreen,"Document does not exist", 
        Toast.LENGTH_LONG).show()
   }
                               
}).addOnFailureListener(OnFailureListener { e->
val error=e.message                             
Toast.makeText(this@HostActivityScreen,"Error:"+error, Toast.LENGTH_LONG).show()
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...