Как мне ждать OnCompleteListener в Kotlin? - PullRequest
0 голосов
/ 04 сентября 2018

Я вызываю метод getFavorite для получения данных из класса базы данных в Activity. Но это не ждет 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>
        }
    }

}

1 Ответ

0 голосов
/ 08 марта 2019

В вашем адаптере вам нужно всегда отправлять новый список и обновлять свой адаптер, вызывая notifyDataSetChange () и как только обратный вызов завершится, вы можете использовать etherd, используя liveData для отправки данных на него, прослушивания, передачи новых данных в адаптер и обновления, чтобы убедиться, что у вас всегда есть нужные и самые последние данные, и вы можете использовать rxJava для уверен, что вы работаете в фоновом потоке, и как только он закончится, отправьте его в поток пользовательского интерфейса и обновите свой адаптер

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