fun getSurvey() : MutableList<SurveyMaster>{
//Retrofit creates implementation for this method getSurveyList()
val call : Call<List<SurveyMaster>> = retrofitPlaceHolderAPI.getSurveyList("bearer "+customIDToken)
val surveyList = mutableListOf<SurveyMaster>()
//enqueue - executing on the background thread, to execute asynchronously
call.enqueue(object : Callback<List<SurveyMaster>>{
override fun onFailure(call: Call<List<SurveyMaster>>, t: Throwable) {
Log.e("Error", t.message)
//Log.e("Error", t.localizedMessage)
}
override fun onResponse(call: Call<List<SurveyMaster>>, response: Response<List<SurveyMaster>>) {
if (!response.isSuccessful){
Log.e("SurveyList Error", "code: "+response.code())
return
}
val surveys = response.body()
for(element in surveys!!){
surveyList.add(element)
}
}
})
return surveyList
}
Enqueue 方法在后台线程上运行,但如何在 enqueue 方法中返回列表。上面的代码返回空列表。提前致谢
就像您已经提到的那样,enqueue 将在后台线程上执行此 API 调用,因此您的函数将始终返回空列表,因为现在尚未从 API 收到任何响应,因此您提到的这个循环:-
for(element in surveys!!){
surveyList.add(element)
}
这个循环将在稍后运行(当收到 API 的响应时),同时您返回的列表此时为空。这里您不能直接从该方法返回数据。
您可以使用接口使用回调方法。由于您已经获得列表形式的响应,因此无需创建单独的列表并将数据添加到其中。
fun getSurvey(onGetSurveyListener: OnGetSurveyListener){
val call : Call<List<SurveyMaster>> = retrofitPlaceHolderAPI.getSurveyList("bearer "+customIDToken)
val surveyList = mutableListOf<SurveyMaster>()
//enqueue - executing on the background thread, to execute asynchronously
call.enqueue(object : Callback<List<SurveyMaster>>{
override fun onFailure(call: Call<List<SurveyMaster>>, t: Throwable) {
Log.e("Error", t.message)
onGetSurveyListener.onGetSurveyFailure(t.localizedMessage)
//Log.e("Error", t.localizedMessage)
}
override fun onResponse(call: Call<List<SurveyMaster>>, response: Response<List<SurveyMaster>>) {
if (!response.isSuccessful){
Log.e("SurveyList Error", "code: "+response.code())
return
}
response.body?.let{list->
onGetSurveyListener.onGetSurveySuccess(list)
}
}
})
}
interface OnGetSurveyListener {
fun onGetSurveySuccess(surveyList:List<SurveyMaster>)
fun onGetSurveyFailure(errorMessage: String)
}
现在,通过成功和失败回调,您可以处理这两种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)