Как заменить AsyncTask на doAsync - PullRequest
0 голосов
/ 29 августа 2018

Я извлекаю все документы из хранилища и сохраняю их в ArrayList с каждым элементом, являющимся пользовательским типом данных. Процесс извлечения данных занимает немного времени, и поэтому я хочу сделать listView после того, как данные были извлечены. Я уже использовал AsyncTask и использовал бы функцию onPostExectue, но я узнал о doAsync в kotlin и хотел попробовать его.

Может кто-нибудь подсказать мне, как это сделать?

Это функция для получения данных

    fun initFirestore(): ArrayList<MetaData>{
        FirebaseApp.initializeApp(this@MainActivity)
        val db = FirebaseFirestore.getInstance()
        val returnData: ArrayList<MetaData> = ArrayList()
        db.collection("name_of_collection")
                .orderBy("id")
                .get()
                .addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        for (document in task.result) {
                            val data = document.data
                            returnData.add(MetaData(data["name"].toString(), data["artist"].toString(), data["url"].toString()))
//                            Log.d("Test", document.id + " => " + data)
                        }
                    } else {
//                        Log.d("Test", "Error getting documents: ", task.exception)
                    }
                }
        return returnData
    }

Журнал показывает правильные данные. И я звоню из другой функции

fun getSongs(){
        doAsync {
            val test = initFirestore()

            onComplete {
                Log.v("Test","$test")
            }

            uiThread {
                Log.v("A","$test")
            }
        }
    }

Оба журнала здесь возвращают пустой список

...