Android:如何用改造填充 arraylist (Kotlin)
Android: how fill arraylist with retrofit (Kotlin)
我正在尝试获取通过改装收集的所有数据并将其存储在数组列表中,当我调试循环时数据就在那里但是当我 return 它在下面时它已经消失了
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之后返回,而不是在成功响应时,我建议你使用接口作为回调得到你的 API.
的回应
这是您问题的解决方案。
// 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
}
})
}
我正在尝试获取通过改装收集的所有数据并将其存储在数组列表中,当我调试循环时数据就在那里但是当我 return 它在下面时它已经消失了
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之后返回,而不是在成功响应时,我建议你使用接口作为回调得到你的 API.
的回应这是您问题的解决方案。
// 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
}
})
}