我正在Android中创建一个项目,并在am上使用Anko库在单独的线程上运行一个API请求。所述线程只是简单地进行HTTP调用和数据解析,而UI线程传递所述数据并启动下一个活动。
问题是,我的程序似乎从未进入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()
}
}
}
}发布于 2018-06-20 15:43:43
代码跳入catch块,因为不能在没有调用Looper.prepare()的线程上使用Looper.prepare()。解决方案是在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()
}
}
}
}https://stackoverflow.com/questions/50951385
复制相似问题