【问题标题】:How can I use Response.Listener volley in android app with Koltllin如何在带有 Koltllin 的 android 应用程序中使用 Response.Listener volley
【发布时间】:2019-05-17 11:50:02
【问题描述】:

我正在使用 Kotlin,api 28 开发一个 android 应用程序。我还使用 swagger 来获取所有 web 服务。大摇大摆地获得“Kotlin_client_generated”文件后,将其添加到我的项目中。我想使用以下 mobileApi 之一:

fun apiMobileAPIGetProviderPost(disc: kotlin.Any, pageIndex: kotlin.Int, pageSize: kotlin.Int, sort: kotlin.String, order: kotlin.String) : kotlin.Array<ProviderData> {
        val localVariableBody: kotlin.Any? = disc
        val localVariableQuery: MultiValueMap = mapOf("pageIndex" to listOf("$pageIndex"), "pageSize" to listOf("$pageSize"), "sort" to listOf("$sort"), "order" to listOf("$order"))

        val contentHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf()
        val acceptsHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf("Accept" to "application/json")
        val localVariableHeaders: kotlin.collections.MutableMap<kotlin.String,kotlin.String> = mutableMapOf()
        localVariableHeaders.putAll(contentHeaders)
        localVariableHeaders.putAll(acceptsHeaders)

        val localVariableConfig = RequestConfig(
            RequestMethod.POST,
            "/api/MobileAPI/GetProvider",
            query = localVariableQuery,
            headers = localVariableHeaders
        )
        val response = request<kotlin.Array<ProviderData>>(
            localVariableConfig,
            localVariableBody
        )

        return when (response.responseType) {
            ResponseType.Success -> (response as Success<*>).data as kotlin.Array<ProviderData>
            ResponseType.Informational -> TODO()
            ResponseType.Redirection -> TODO()
            ResponseType.ClientError -> throw ClientException((response as ClientError<*>).body as? String ?: "Client error")
            ResponseType.ServerError -> throw ServerException((response as ServerError<*>).message ?: "Server error")
            else -> throw kotlin.IllegalStateException("Undefined ResponseType.")
        }
    }   

我在我的活动中添加以下代码:

val params = HashMap<String, String>()
        MobileAPIApi().apiMobileAPIGetProviderPost(params,0,50,null,null,
            object : Response.Listener<List<ProviderData>>() {
                fun onResponse(response: List<ProviderData>?) {
                    if (response != null && response.size != 0) {......}

我的问题就在这里,为什么不能像在 Java 中那样使用 Response.Listener,我该如何替换它。

【问题讨论】:

    标签: android kotlin android-volley


    【解决方案1】:

    这是Kotlin中使用凌空抽射的例子:

    val stringRequest = object : StringRequest(Request.Method.POST, "url",
            com.android.volley.Response.Listener { response ->
                if (response != null) {
    
                }
            }, com.android.volley.Response.ErrorListener { error -> error.printStackTrace() }) {
            @Throws(AuthFailureError::class)
            override fun getParams(): Map<String, String> {
                val params = HashMap<String, String>()
                params["key"] = "value"
                return params
            }
        }
    

    您可以替换您的参数,并在替换值后使用凌空响应。

    【讨论】:

    • @Suppress public final fun apiMobileAPIGetProviderPost(disc: Any, pageIndex: Int, pageSize: Int, sort: String, order: String) 的参数太多:在 io.swagger 中定义的数组。 client.apis.MobileAPIApi
    • 如何更改我的代码以使其正常运行,在此先感谢您,有什么帮助吗?我真的卡住了
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2017-06-08
    • 2013-03-11
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多