我在异步结束时使用回调函数。但它并没有很好地运作:(
我的情况:
fun function1(callback : (obj1: List<ObjT1>,obj2: List<ObjT1>)-> Unit?){
doAsync {
//long task
uiThread { callback(result1, result2) }
}
}
调用回调,但result1
和result2
(列表)为空。我检查了以前列表的内容。
编辑: 问题:我的回调是一个接收2个对象结果1和result2的函数,问题是函数回调有时收到结果为空,我检查它们的内容并且不是空的。
答案 0 :(得分:0)
可能是因为您已将返回类型声明为Unit?
,但返回两个值。快速解决方法是将result1
和result2
放入数组中。
答案 1 :(得分:0)
现在这个问题是关于已弃用的 Kotlin 库。 我建议使用协程。
答案 2 :(得分:-1)
考虑使用Kotlin的协同程序。 Coroutines是Kotlin的新功能。它在技术上仍处于实验阶段,但JetBrains告诉我们它非常稳定。 在此处阅读更多内容:https://kotlinlang.org/docs/reference/coroutines.html
以下是一些示例代码:
fun main(args: Array<String>) = runBlocking { // runBlocking is only needed here because I am calling join below
val job = launch(UI) { // The launch function allows you to execute suspended functions
val async1 = doSomethingAsync(250)
val async2 = doSomethingAsync(50)
println(async1.await() + async2.await()) // The code within launch will
// be paused here until both async1 and async2 have finished
}
job.join() // Just wait for the coroutines to finish before stopping the program
}
// Note: this is a suspended function (which means it can be "paused")
suspend fun doSomethingAsync(param1: Long) = async {
delay(param1) // pause this "thread" (not really a thread)
println(param1)
return@async param1 * 2 // return twice the input... just for fun
}