簡體   English   中英

Android:如何用 retrofit (Kotlin) 填充 arraylist

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM