Как дождаться окончания звонка в Kotlin (Android) - PullRequest
1 голос
/ 31 марта 2019

В приложении для Android я пытаюсь сделать вызов firebase, который заполняет ArrayAdapter, чтобы показать список кораблей. Когда я использую локальный ArrayList, он работает, но мой вызов Firebase не работает должным образом. Поскольку этот вызов firebase является асинхронным, android показывает мне приложение перед завершением вызова firebase, поэтому мой ArrayAdapter пуст и мой макет также пуст. Я пытался использовать метод Coroutine, который я видел в Интернете, но мне кажется, что он не работает. Кто-нибудь может мне помочь ? Вот мой исходный код:

MainActivity:

    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var containerShips : List<Containership> = listOf()
        val db = Database()

        runBlocking {
            containerShips = db.getAllContainerships()
        }




        val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, containerShips)

        val listShipDetails = findViewById<ListView>(R.id.listShipDetails)

        listShipDetails.adapter = arrayAdapter

    }

База данных:

   suspend fun getAllContainerships() : List<Containership> {
        val list : MutableList<Containership> = mutableListOf()
        val job = GlobalScope.launch {
            db.collection("Containership").get().addOnSuccessListener { result ->
                for (containership in result) {
                    list.add(containership.toObject(Containership::class.java))
                    println(containership.toObject(Containership::class.java))
                }
            }
        }
        job.join()
        return list
    }

Спасибо за вашу помощь!

...