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

Я пытаюсь вернуть список изнутри функции firestore, основываясь на том, выполнено ли условие. Я хочу вернуть разные списки, когда выбраны разные категории.

Я пытался:

  1. удаление оператора return из функции firestore, которая не работала и возвращала пустой список из-за асинхронного поведения firestore.
  2. создаю свой собственный обратный вызов, чтобы дождаться, пока Firestore вернет данные, используя интерфейс, как я видел в некоторых других вопросах, но в таком случае, как мне получить к нему доступ, поскольку моя функция имеет значение Int (то есть private fun getRandomPeople(num: Int): List<String>)?

Каким может быть способ возврата разных списков для разных категорий в зависимости от состояния пожарного депо?

Мой код (не класс деятельности):

class Board// Create new game
(private val context: Context, private val board: GridLayout) {
  fun newBoard(size: Int) {
          val squares = size * size
          val people = getRandomPeople(squares)
          createBoard(context, board, size, people)

      }

  fun createBoard(context: Context, board: GridLayout, size: Int, people: List<String>) {
          destroyBoard()
          board.columnCount = size
          board.rowCount = size
          var iterator = 0
          for(col in 1..size) {
              for (row in 1..size) {
                  cell = RelativeLayout(context)
                  val cellSpec = { GridLayout.spec(GridLayout.UNDEFINED, GridLayout.FILL, 1f) }
                  val params = GridLayout.LayoutParams(cellSpec(), cellSpec())
                  params.width = 0
                  cell.layoutParams = params
                  cell.setBackgroundResource(R.drawable.bordered_rectangle)
                  cell.gravity = Gravity.CENTER
                  cell.setPadding(5, 0, 5, 0)
                  text = TextView(context)
                  text.text = people[iterator++]
                  words.add(text.text as String)
                  text.maxLines = 5
                  text.setSingleLine(false)
                  text.gravity = Gravity.CENTER
                  text.setTextColor(0xFF000000.toInt())
                  cell.addView(text)
                  board.addView(cell)
                  cells.add(GameCell(cell, text, false, row, col) {  })
              }
          }
      }

      private fun getRandomPeople(num: Int): List<String> {
          val mFirestore: FirebaseFirestore=FirebaseFirestore.getInstance()
          val mAuth: FirebaseAuth=FirebaseAuth.getInstance()
          val currentUser: FirebaseUser=mAuth.currentUser!!
          var validIndexes :MutableList<Int>
          var chosenIndexes = mutableListOf<Int>()
          var randomPeople = mutableListOf<String>()
                 mFirestore.collection("Names").document(gName).get().addOnSuccessListener(OnSuccessListener<DocumentSnapshot>(){ queryDocumentSnapshot->
                      var categorySelected:String=""

                      if (queryDocumentSnapshot.exists()) {
                          categorySelected= queryDocumentSnapshot.getString("selectedCategory")!!
                          print("categoryselected is:$categorySelected")
                          Toast.makeText(context, "Got sel category from gameroom:$categorySelected", Toast.LENGTH_LONG).show()
                          when(categorySelected){
                              "CardWords"->{
                                  for (i in 1..num) {
                                      validIndexes=(0..CardWords.squares.lastIndex).toMutableList()
                                      val validIndexIndex = (0..validIndexes.lastIndex).random()
                                      val peopleIndex = validIndexes[validIndexIndex]
                                      chosenIndexes.add(peopleIndex)
                                      val person = CardWords.squares[peopleIndex]
                                      randomPeople.add(person)
                                      validIndexes.remove(peopleIndex)
                                      peopleIndexes = chosenIndexes.toList()
                                  }
                              }
                              else->{}
                          }
                      }
                      else {
                          Toast.makeText(context, "Sel category does not exist", Toast.LENGTH_LONG).show()
                      }

                  }).addOnFailureListener(OnFailureListener { e->
                      val error=e.message
                      Toast.makeText(context,"Error:"+error, Toast.LENGTH_LONG).show()
                  })

      return randomPeople.toList()

      }
}

Деятельность A:

Board(this, gridLay!!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...