Android Kotlin как передать именованную функцию в качестве параметра в другую функцию, которая будет выполняться, когда JsonObjectRequest вернет успех? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть функция с именем doReq, она будет выполнять JsonObjectRequest, и в случае успеха мне нужно, чтобы она выполнила именованную функцию, которую я передаю с ответом об успешном завершении запроса. Пожалуйста, взгляните на код ниже:

package mypackage1
fun reqSuccess(resp: JSONObject) {    
}
package mypackage2
fun doReq(url: String, how do i pass in reqSuccess function here?) {                
    val req: JsonObjectRequest = object : JsonObjectRequest(Request.Method.POST, url, json,
            Response.Listener { response ->
                // need to perform reqSuccess here passing in response
            },
            Response.ErrorListener { error ->
            }
    )
}

Дополнительное примечание: doReq будет вызываться в других пакетах, и каждый пакет имеет свою собственную функцию reqSuccess. Хорошо, теперь правильно,

    package mypackage2
    fun doReq(url: String, onSuccess: (response: JSONObject) -> Unit) {
        val req: JsonObjectRequest = object : JsonObjectRequest(Request.Method.POST, url, json,
                Response.Listener { response ->
                   onSuccess(response)
                },
                Response.ErrorListener { error ->
                }
        )
    }
package mypackage1
fun reqSuccess(resp: JSONObject) {    
}

doReg("someurl",::reqSuccess)

1 Ответ

1 голос
/ 19 февраля 2020

Вы должны добавить лямбда-параметр к функции doReq():

fun doReq(url: String, onSuccess: (response: JSONObject) -> Unit = ::reqSuccess) {
    val req: JsonObjectRequest = object : JsonObjectRequest(Request.Method.POST, url, json,
            Response.Listener { response ->
               onSuccess(response)
            },
            Response.ErrorListener { error ->
            }
    )
}

Вы можете вызвать эту функцию следующим образом:

doReq("someurl")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...