gpt4 book ai didi

android - 如何在android中进行同步网络调用?

转载 作者:行者123 更新时间:2023-11-30 04:56:17 25 4
gpt4 key购买 nike

我正在尝试制作一个应用程序,该应用程序不断访问 google API 以获取两点之间的距离,然后处理该距离并将其添加到循环内的数据库中。

我之前使用过 volley,但它不会等待,我的函数会继续执行其余代码行。我需要帮助,以便只有在我点击 google API 后收到某些结果时,代码行才会等待该方法返回,然后在下一行代码中使用该结果。

最佳答案

我建议研究协程。更具体地看一下 async 启动器,它应该将值返回到等待变量。你的代码异步运行(启动一个新线程,这样你的主 UI 线程就不会阻塞,用户可以自由地做他们想做的事),当调用返回时,你的代码会在变量等待的地方再次调用。您可以在开始异步调用之前设置一个计时器,并在等待之后停止它。

您还可以使用 withContext{} 来等待结果。当协程返回结果时,代码将在调用函数中继续。

startTimer()
val job = coroutineScope{
async{
networkCall()
}
}
job.await()
stopTimer()

startTimer()
coroutineScope{
launch{
withContext{
networkCall()
}
//code will continue when networkCall() has returned a result
stopTimer() //be careful, this may be called through a background thread.
}
}

协程是线程安全且轻量级的,因此您可以毫无问题地启动任意多个协程。此外,通过使用 coroutineScope,您将避免生命周期问题,例如您的 ui 被旋转,这通常会导致重新发送网络调用。使用 coroutineScope,您的调用将具有调用 Activity/fragment 的生命周期,因此如果您的应用程序意外决定停止并且不再关心结果,它将被取消或终止。

希望这对您有所帮助,Panos。

关于android - 如何在android中进行同步网络调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59083541/

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