[英]How to return a variable object in kotlin function
I´m newbie in kotlin development, and I need to return a String or an a List var in one function with Any, but I can't get the expected result: 我是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
}
}
when I see the logs in logCat of Android Studio for see what my function returns only show '[]', any sugestion for my noob problem? 当我在Android Studio的logCat中看到日志以查看函数返回的内容仅显示为'[]'时,是否有解决我的菜鸟问题的建议?
your problem is that you are handling the return after doing an asynchronous call, this causes the return to be made before you get the response - So neither the error or sellersList is ever getting set and its just returning an empty list. 您的问题是您在执行异步调用后正在处理返回,这导致在获得响应之前进行返回-因此,既不会设置错误或SellersList,也不会返回空列表。 Instead of returning something directly you may want to consider passing in a success and error callback or a listener as a parameter and then give the result to the callback.
除了直接返回某些内容外,您可能需要考虑将成功和错误回调或侦听器作为参数传递,然后将结果提供给回调。
something like: 就像是:
fun loadEmployeesFromApi (successCallback: (List<SellersItem>)->Unit, errorCallback: (String)->Unit) {
...
and make the call when you load the data 并在加载数据时拨打电话
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)
}
}
and you can make the call like this: 您可以像这样拨打电话:
loadEmployeesFromApi({ sellerList ->
// handle success
}, { errorMessage ->
// handle error
})
You need to use a generic concept here. 您需要在此处使用通用概念。
pass T and handle accordingly 通过T并相应地处理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.