[英]Android: how fill arraylist with retrofit (Kotlin)
我正在嘗試獲取 retrofit 收集的所有數據並將其存儲在 arraylist 中,當我調試循環時數據就在那里,但是當我將其返回到下方時它已經消失了
fun ListRecipe() : ArrayList<RecipeObj> {
var obj: ArrayList<RecipeObj> = ArrayList<RecipeObj>()
// RecipeLiveData = MutableLiveData<hitsobj>()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(Credentials.Url)
.addConverterFactory(GsonConverterFactory.create())
.build()
val service: ApiService = retrofit.create<ApiService>(ApiService::class.java)
service.getAllRecipe("rice", Credentials.App_Id, Credentials.App_Key).enqueue(object : Callback<RecipeObj> {
override fun onResponse(
call: Call<RecipeObj>, response: Response<RecipeObj>?) {
val recetas: RecipeObj? = response!!.body()
var list = listOf(recetas)
for(receta in list){
obj.add(receta!!)
}
}
override fun onFailure(call: Call<RecipeObj>, t: Throwable) {
Log.e(TAG, t.message.toString())
}
})
var test = obj
return(obj)
}
由於 API 從后端加載數據需要一些時間,因此您在調用 API 后返回,而不是在成功響應中,我建議您使用接口作為回調來獲取 ZDB974238714CA8DE634A7CE1D03 的響應。
這是您的問題的解決方案。
// generic interface to take callback
interface RetrofitCallBack<T> {
fun onSuccess(t : T)
fun onError(throwable: Throwable)
}
// use callback
fun getListOfRecipe(retrofitCallBack: RetrofitCallBack<List<RecipeObj>>) {
// RecipeLiveData = MutableLiveData<hitsobj>()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(Credentials.Url)
.addConverterFactory(GsonConverterFactory.create())
.build()
val service: ApiService = retrofit.create<ApiService>(ApiService::class.java)
service.getAllRecipe("rice", Credentials.App_Id, Credentials.App_Key).enqueue(object : Callback<RecipeObj> {
override fun onResponse(
call: Call<RecipeObj>, response: Response<RecipeObj>?) {
val recetas: RecipeObj? = response!!.body()
retrofitCallBack.onSuccess(listOf(recetas))
}
override fun onFailure(call: Call<RecipeObj>, t: Throwable) {
retrofitCallBack.onError(t)
}
})
}
// call func like this
fun fetchListOfRecipes() {
getListOfRecipe(object : RetrofitCallBack<List<RecipeObj>>{
override fun onSuccess(t: List<RecipeObj>) {
// get your list here
}
override fun onError(throwable: Throwable) {
// get error here
}
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.