我正在Android Studio中创建一个项目,并正在使用Anko库在单独的线程上运行API请求。当UI线程传递数据并启动下一个活动时,该线程只是进行HTTP GET调用并解析数据。
问题是,我的程序似乎从未进入doAsync块。我在下面为我为该调用编写的函数发布了代码,单击按钮即会调用该函数,单击该按钮时什么也没有发生。它不会停止,不会崩溃,什么也不会。活动的其他部分甚至会响应。
我尝试过的解决方案:
我在网上找不到任何真正的东西,因此欢迎您提供任何帮助。
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()
}
}
}
}
答案 0 :(得分:2)
由于无法在尚未调用Looper.prepare()的线程上catch
,所以代码正在跳入toast
块。解决方案将称为toast
uiThread
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()
}
}
}
}