我目前正在开发一个Android应用程序,该应用程序将Retrofit库用于REST api的使用。
例如,我从MainActivity.kt获得以下代码:
fun userLogin(){
calls.userLogin() { updateUiComponents() }
}
fun updateUiComponents(){
Toast.makeText(applicationContext, "LAMBDA EXECUTED",Toast.LENGTH_SHORT).show()
}
我在一个单独的文件中有Retrofit调用的定义:
fun userLogin(postActionMethod: () -> Unit){
val call = service.userLogin()
call.enqueue(object : Callback<LoginResponse>{
override fun onFailure(call: Call<LoginResponse>?, t: Throwable?) {
Log.i("ERROR RUNNING CALL", t?.message.toString())
}
override fun onResponse(call: Call<LoginResponse>?, response: Response<LoginResponse>?) {
postActionMethod()
}
})
}
实现Retrofit调用并成功完成后,到达onResponse方法,我想将Response对象作为lambda函数的参数发送回MainAcativity.kt。在MainActivity.kt中,lambda函数将使用此信息来执行某些特定任务。
这是一种通过参数定义lambda函数的方法吗?如果是这样,我如何像以下行中那样将lambda函数作为参数传递:
calls.userLogin(body) { updateUiComponents() }
谢谢!
答案 0 :(得分:2)
我不知道我是否能解决您的问题,但是lambda不需要任何参数。您可以轻松地执行类似的操作
fun userLogin(postActionMethod: (Response<LoginResponse>?) -> Unit){
val call = service.userLogin()
call.enqueue(object : Callback<LoginResponse>{
override fun onFailure(call: Call<LoginResponse>?, t: Throwable?) {
Log.i("ERROR RUNNING CALL", t?.message.toString())
}
override fun onResponse(call: Call<LoginResponse>?, response: Response<LoginResponse>?) {
postActionMethod(response)
}
})
}
所以您可以用它
fun userLogin(){
calls.userLogin() { updateUiComponents(it) }
}
fun updateUiComponents(response: Response<LoginResponse>?){
Toast.makeText(applicationContext, "LAMBDA EXECUTED",Toast.LENGTH_SHORT).show()
}