gpt4 book ai didi

java - Anko doAsync 调用不执行

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

我正在 Android Studio 中创建一个项目,并且正在使用 Anko 库在单独的线程上运行 API 请求。所述线程只是进行 HTTP GET 调用并解析数据,同时 UI 线程传递所述数据并启动下一个 Activity 。

问题是,我的程序似乎从未进入 doAsync block 。我已经在下面发布了我为调用编写的函数的代码,它是在单击按钮时调用的,当单击所述按钮时没有任何反应。它不会失速,不会崩溃,什么都没有。 Activity 的其他部分甚至会响应。

我尝试过的解决方案:

  • 调试进入 block ,简单地跳过它
  • 删除 try/catch
  • 在主线程上进行调用和解析(抛出异常)
  • 像现在这样将调用放在一个单独的函数中(最初是在按钮监听器中)

我在网上找不到任何关于此的信息,所以欢迎任何帮助,在此先感谢。

MainActivity.kt

    private
fun asyncCall(n : Int) {
doAsync {
try {
// Call API, store Place objects in placesList
toast("streamJSON call")
placesList = streamJSON()
} catch (e: java.lang.RuntimeException) {
// Error parsing JSON
toast("Invalid Request")
}

uiThread {
if(n == 1) { // Submit button
goToResults()
}
else if (n == 2) { // Feeling lucky button
feelingLuckyAlert()
}
}
}
}

最佳答案

代码正在跳入 catch block ,因为您无法在未调用 Looper.prepare() 的线程上 toast。解决方案是在 uiThread

中调用 toast
private fun asyncCall(n : Int) {
doAsync {
try {
uiThread {
toast("streamJSON call")
}

// Call API, store Place objects in placesList
placesList = streamJSON()
} catch (e: java.lang.RuntimeException) {
uiThread {
toast("Invalid Request")
}
}

uiThread {
if(n == 1) { // Submit button
goToResults()
} else if (n == 2) { // Feeling lucky button
feelingLuckyAlert()
}
}
}
}

关于java - Anko doAsync 调用不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951385/

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