如何在Kotlin函数中返回变量对象

时间:2019-02-13 19:17:14

标签: android kotlin

我是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中看到日志以查看我的函数返回的内容仅显示'[]'时,是否有提示我的菜鸟问题?

2 个答案:

答案 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并进行相应处理