我有一个功能:
fun getUpdatedStr(): DoubleArray {
var Strings : DoubleArray = doubleArrayOf()
for (i in 0..9) {
val page = Jsoup.connect("somesite.com").get()
val table = page.select("table").first().select("td").first()
Strings += table.text()
}
return Strings
}
这将引发 android.os.NetworkOnMainThreadException 。我的问题是,如果我尝试将此函数放入线程中,则无法返回该值以将其用于其他函数。解决此问题的最佳方法是什么?
答案 0 :(得分:0)
您无法从主线程在Android上进行网络通话。您必须使用辅助线程。
这可以在普通的旧Java线程中完成,也可以在某些“更高级别”的结构中完成,例如AsyncTask,HandlerThread,RxJava,协程等。
通常,您无法从所需的线程中“返回”,因为触发新线程后,执行将继续在主线程上进行。
如果使用协程,则可以使用suspend函数来执行此操作。
如果您不想学习协程,那么使用RxJava必须将一个可观察到的返回给调用函数
否则,将您的方法转换为基于回调的方法,并在完成后调用回调方法