【问题标题】:How can I have OnCompleteListener wait in Kotlin?如何让 OnCompleteListener 在 Kotlin 中等待?
【发布时间】:2018-09-04 13:47:51
【问题描述】:

我调用getFavorite 方法从Activity 中的Database Class 获取数据。但它不会等待onCompleteListener。所以列表是空的。我该怎么办?

GetMovieActivity.java

    private fun getPhotoListFromApi() {
    val apiService = ApiClient.getRetrofitInstance().create(ApiService::class.java)

    var list = ArrayList<MovieDetailsResponse>()
    var db = Database()
    db.getFavorite()

    for (id in db.moviesID)
    {
        apiService.getMovieDetails(
                id.toString().toInt(),
                "922df43f1a304aca901feb9728b01943",
                Locale.getDefault().language + "-" + Locale.getDefault().country)
                .enqueue(object : Callback<MovieDetailsResponse> {

                    override fun onFailure(call: Call<MovieDetailsResponse>, t: Throwable) {
                    }

                    override fun onResponse(call: Call<MovieDetailsResponse>, response: Response<MovieDetailsResponse>) {
                        response.body()?.let { it ->

                            list.add(it)
                        }

                    }

                })

    }
    adapter.setList((list as List<MovieListItem>?)!!)

}

Database.kt

    fun getFavorite()
{
   val dr = db.collection("Favorites").document(mAuth!!.uid) as DocumentReference
    dr.get().addOnCompleteListener { task: Task<DocumentSnapshot> ->
        if(task.isSuccessful)
        {
            moviesMap = task.result.data!!
            moviesID = moviesMap.get("movies") as ArrayList<Any>
        }
    }

}

【问题讨论】:

  • 签出this
  • 我仍然得到列表为空:/
  • 应该可以,它等待的数据不是你想要的吗?
  • 好的,谢谢。我现在可以做

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

在您的适配器中,您需要始终发送新列表并通过调用 notifyDataSetChange() 刷新您的适配器 并且一旦回调完成,您就可以使用 liveData 将数据发布到它并收听它并将新数据推送到适配器并刷新它以确保您始终拥有正确和最新的数据,您可以使用 rxJava 制作确保您在后台线程中工作,一旦完成将其推送到 ui 线程并更新您的适配器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2013-09-13
    • 2022-11-11
    • 2021-10-15
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多