我调用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>
}
}
}
答案 0 :(得分:0)
在您的适配器中,您需要始终发送新列表并通过调用notifyDataSetChange()刷新适配器 一旦回调完成,您就可以使用liveData将数据发布到它并进行监听,然后将新数据推送到适配器并刷新它,以确保您始终拥有正确的最新数据,并且可以使用rxJava来完成确保您正在后台线程中工作,一旦完成,将其推入ui线程并更新适配器