【发布时间】:2021-04-15 13:37:18
【问题描述】:
成功注册后,我尝试实现网络服务发现并将名称设置为 textView。但我得到了一个android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 异常。我的基本结构如下所示:
NsdManager.RegistrationListener mRegistrationListener;
onCreate() {
mRegistrationListener = new NsdManager.RegistrationListener() {
onServiceRegistered(serviceInfo) {
TextView textView = (TextView) findViewById(R.id.nsdServiceNameText);
textView.setText(serviceInfo.getServiceName());
}
}
mNsdManager = (NsdManager) this.getBaseContext().getSystemService(Context.NSD_SERVICE);
mNsdManager.registerService(
serviceInfo,
NsdManager.PROTOCOL_DNS_SD,
mRegistrationListener);
}
对我来说,我可能在错误的上下文中编辑视图是有道理的,但我是如何到达那里的,更重要的是我该如何解决这个问题?
【问题讨论】:
-
有些东西让你离开了主线程。那是什么,我不知道。如何修复它,提供链接:)
-
在 UI 线程上调用 setText()。
标签: java android callback textview