Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android kotlin中的线程Runnable在emulator中运行良好,但在设备上出现错误_Android_Kotlin - Fatal编程技术网

Android kotlin中的线程Runnable在emulator中运行良好,但在设备上出现错误

Android kotlin中的线程Runnable在emulator中运行良好,但在设备上出现错误,android,kotlin,Android,Kotlin,以下代码在emulator上运行良好,但在设备上运行时出现以下错误 只有创建视图层次结构的原始线程才能接触其 观点 在线程内部,将settext代码放在下面的代码中 通常,您从另一个线程接触了UI视图,因此必须在传递给runOnUiThread()方法的Runnable实例中的UI线程上执行 runOnUiThread(new Runnable() { @Override public void run() { // write your UI name.settext co

以下代码在emulator上运行良好,但在设备上运行时出现以下错误

只有创建视图层次结构的原始线程才能接触其 观点


在线程内部,将
settext
代码放在下面的代码中

通常,您从另一个线程接触了UI视图,因此必须在传递给
runOnUiThread()
方法的
Runnable
实例中的UI线程上执行

runOnUiThread(new Runnable() {

  @Override
  public void run() {

    // write your UI name.settext code here.
    name.setText(ob.get("name").toString());

  }
});
为科特林

参考资料:-用于


不能从后台线程操作UI线程(也称为主线程)。 这就是大多数(如果不是全部)UI框架的工作方式。 在Android中,UI是由UI线程处理的,只有它才能处理与UI相关的所有事情

您的代码在仿真器上运行的事实可能是由于纯case造成的,如果您运行它十几次,它可能会正常工作。这与多线程代码似乎一直在工作,可能几周甚至几年后由于死锁或竞争条件而停止工作时的行为相同

Aving说,鉴于可用的上下文非常少,您可以使用runOnUiThread(),但请先阅读


最后一件事:如果您在后台线程中从某个源(数据库?网络?)检索数据,那么直接访问视图元素是很奇怪的。您应该将您的后台逻辑重新发布到其他地方(例如存储库),并避免使用“普通”线程,尤其是在活动/片段或其他短期组件上,因为在配置更改的情况下,线程可能会超过活动/片段生命周期。如果您不太注意,对线程内视图的引用可能会导致内存泄漏,导致对活动的引用保留在内存中(在系统完成它之后),从而阻止垃圾收集器消除它。简而言之,您有发生OutOfMemoryException的风险。

您应该使用handler,但我的代码在emulator中运行良好,它只在移动设备中显示错误。@KnowledgeSeek,您在移动设备中尝试过上述代码吗?
runOnUiThread(new Runnable() {

  @Override
  public void run() {

    // write your UI name.settext code here.
    name.setText(ob.get("name").toString());

  }
});
this@YourActivityName.runOnUiThread(java.lang.Runnable {
this.name.text = (ob.get("name").toString())
})