我正在使用Kotlin。我有一个循环将继续下去。但是由于某种原因,我无法更新文本视图。这是我的简化示例。
$ rails c production
Running via Spring preloader in process 3131
Loading production environment (Rails 5.2.2)
2.6.3 :001 > User.first
Traceback (most recent call last):
1: from (irb):1
NoMethodError (undefined method `encode' for nil:NilClass)
答案 0 :(得分:2)
发生的原因是因为您在不同于主/ UI Thread
的另一个Thread
内调用UI更新,所以您的代码无法到达UI {上的View
s { {1}}。
在Thread
内部调用更新https://stackoverflow.com/a/11140429/10464730之类的UI上的代码的代码(只需复制runOnUiThread
部分)。
或者像这样https://stackoverflow.com/a/9884344/10464730在runOnUiThread
上进行.post
。在大多数情况下,我会先使用TextView
。如果不起作用,那就是我使用runOnUiThread
的时候。
对不起,我发布的代码是.post
,但我认为您可以在Java
上查找与之等效的代码。
答案 1 :(得分:0)
只能在UI线程中更新视图。尝试这样的事情:
while (!Thread.currentThread().isInterrupted) {
runOnUiThread(
object : Runnable {
override fun run() {
//do your view update work here
setString(i.toString())
}
}
)
i++
}
答案 2 :(得分:0)
我也喜欢这种协程方法来更新文本视图,请将其放在onCreate中,还包括协程的gradle实现:
GlobalScope.launch(Dispatchers.Main) {
var i = 0
while (i < 100) {
textViewId.setText("#$i")
i++
delay(300)
}
}