gpt4 book ai didi

java - 如何在 Android Kotlin 中包装异步 Java 库?

转载 作者:行者123 更新时间:2023-11-29 18:26:30 24 4
gpt4 key购买 nike

我想在我的 Kotlin Android 应用程序中使用 Java 库,但我对 Kotlin 比较陌生,需要一些建议。图书馆基本上是这样的:

public interface Listener{
void onResult(Result res)
}

public class Client{
public Client(){}
public void setListener(Listener l){}
public void start(){} // Starts Thread(s) (so it's non-blocking), does some server calls, computes result, calls listener.onResult(res) after computation is finished.
public void cancel(){}
}

是的,我知道,我可以直接调用函数并像在 java 中一样使用它,但这是 Kotlin 的方式吗?我读过,做一个类似的任务(使用一个异步函数,它接受一个回调参数)将通过将它包装在协程/挂起函数结构中来完成。但我不知道如何针对我的问题(?)调整它,或者这是错误的方法吗?

最佳答案

如果你想把它变成一个很好的简单的 Kotlin 挂起函数,它会像这样:

suspend fun doTheThing() : Result {
val c = Client()
try {
//suspend until the listener fires or we're cancelled
return suspendCancellableCoroutine {
cont ->
c.setListener {
result -> cont.resume(result)
}
c.start()
}
} catch (e: Exception) {
// If someone cancels the parent job, our job will complete exceptionally
// before the client is done. Cancel the client since we don't need it
// anymore
c.cancel()
throw e
}
}

我没有在您的界面中看到客户端指示失败的方法。如果那是 Result 的一部分,那么您可能希望将其转换为监听器中的异常

关于java - 如何在 Android Kotlin 中包装异步 Java 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58667438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com