我是kotlin开发的新手,我需要使用Any在一个函数中返回String或List var,但我无法获得预期的结果:
fun loadEmployeesFromApi ():Any {
var error = false
var message = ""
var sellersList:List<SellersItem> = emptyList()
retrofit?.let {
val service = it.create(ApiService::class.java)
val call = service.listEmployeesData("getSellers")
call.enqueue(object: Callback<ResponseSellers> {
override fun onFailure(call: Call<ResponseSellers>, t: Throwable) {
error = true
message = "No se pudieron obtener los registros de vendedores debido a un problema de conexión al servidor"
}
override fun onResponse(call: Call<ResponseSellers>, response: Response<ResponseSellers>) {
val code = try {
response.body()!!.code!!.toInt()
} catch (e: NumberFormatException) {
0
}
when (code) {
200 -> {
/** response.body().sellers retorna una sellers: list<SellersItem> con los registros de los vendedores que pueden acceder a la app
**Datos que contiene el objeto:
** usuario
* id
* nombre
* contrasenia
**/
sellersList = response.body()?.sellers as List<SellersItem>
} 0 -> {
error = true
message = "No se pudieron obtener los registros de vendedores, el servidor no retornó una respuesta"
} 404 -> {
error = true
message = "No hay registros de vendedores activos"
} else -> {
error = true
message = "Ocurrió un error al obtener los registros de vendedores, el servidor retornó $code de respuesta"
}
}
}
})
}
return if (error) {
message
} else {
sellersList
}
}
当我在Android Studio的logCat中看到日志以查看我的函数返回的内容仅显示'[]'时,是否有提示我的菜鸟问题?
答案 0 :(得分:2)
您的问题是,您在执行异步调用后正在处理退货, 这将导致在获得响应之前先进行返回-因此,错误或SellersList都不会被设置,并且它只会返回一个空列表。除了直接返回某些内容外,您可能需要考虑将成功和错误回调或侦听器作为参数传递,然后将结果提供给回调。
类似:
fun loadEmployeesFromApi (successCallback: (List<SellersItem>)->Unit, errorCallback: (String)->Unit) {
...
并在加载数据时拨打电话
when (code) {
200 -> {
/** response.body().sellers retorna una sellers: list<SellersItem> con los registros de los vendedores que pueden acceder a la app
**Datos que contiene el objeto:
** usuario
* id
* nombre
* contrasenia
**/
sellersList = response.body()?.sellers as List<SellersItem>
successCallback(sellersList)
} 0 -> {
error = true
message = "No se pudieron obtener los registros de vendedores, el servidor no retornó una respuesta"
errorCallback(message)
} 404 -> {
error = true
message = "No hay registros de vendedores activos"
errorCallback(message)
} else -> {
error = true
message = "Ocurrió un error al obtener los registros de vendedores, el servidor retornó $code de respuesta"
errorCallback(message)
}
}
您可以像这样拨打电话:
loadEmployeesFromApi({ sellerList ->
// handle success
}, { errorMessage ->
// handle error
})
答案 1 :(得分:-1)
您需要在此处使用通用概念。
通过T并进行相应处理