use*_*385 6 java android callback kotlin
我刚开始Kotlin,所以请保持友好:)
我有一个负责获取一些数据并通知主要活动其需要更新其UI的类。
所以我在DataProvider.kt中做了一个函数:
fun getPeople(fromNetwork: Boolean, results: ((persons: Array<Person>, error: MyError?) -> Unit)) {
// do some stuff stuff
val map = hashMapOf(
"John" to "Doe",
"Jane" to "Smith"
)
var p = Person(map)
val persons: Array <Person> = arrayOf (p)
results(persons, null)
}
Run Code Online (Sandbox Code Playgroud)
所以我想从我的活动中调用它,但是我找不到正确的语法!:
DataProvider.getPeople(
true,
results =
)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多事情,但是我只想获取一组人和我的可选错误,以便可以更新UI。
目标是在我的数据提供程序中执行异步代码,以便我的活动可以等待它。
有任何想法吗 ?非常感谢您的帮助。
这实际上取决于您如何定义回调方法。如果使用独立功能,请使用::运算符。首先(当然),我应该解释语法:
(//these parenthesis are technically not necessary
(persons: Array<Person>, error: MyError?)//defines input arguments: an Array of Person and a nullable MyError
-> Unit//defines the return type: Unit is the equivalent of void in Java (meaning no return type)
)
Run Code Online (Sandbox Code Playgroud)
因此该方法定义为:
fun callback(persons: Array<CustomObject>, error: Exception?){
//Do whatever
}
Run Code Online (Sandbox Code Playgroud)
你这样称呼:
DataProvider.getPeople(
true,
results = this::callback
)
Run Code Online (Sandbox Code Playgroud)
但是,如果使用匿名回调函数,则略有不同。这也使用lambda:
getPeople(true, results={/*bracket defines a function. `persons, error` are the input arguments*/persons, error -> {
//do whatever
}})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |