Android setText错误:";只有原始线程。。可以触及它的观点”;
当我想将文本设置为文本视图时,应用程序强制关闭并给出以下错误: android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图 这是我代码的一部分:Android setText错误:";只有原始线程。。可以触及它的观点”;,android,Android,当我想将文本设置为文本视图时,应用程序强制关闭并给出以下错误: android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图 这是我代码的一部分: Thread ThreadRecording = new Thread(new Runnable() { public void run() { while(recorder) { if (
Thread ThreadRecording = new Thread(new Runnable() {
public void run() {
while(recorder)
{
if (body_num = 10)
{
TextView loog = (TextView)findViewById(R.id.textView1);
loog.setText("Total : 10, Thank you");
}
}
}
});
ThreadRecording.start();
有一个按钮;如果用户单击它,它将调用一个函数来设置
body\u num=body\u num+1
,线程将检查body\u num==10您只能在UI线程中修改视图,您需要使用处理程序,例如
Handler h = new Handler(context.getMainLooper()) {
public void handleMessage(Message msg) {
TextView loog = (TextView)findViewById(R.id.textView1);
loog.setText(msg.obj);
}
};
Thread ThreadRecording = new Thread(new Runnable() {
public void run() {
while(recorder)
{
if (body_num = 10)
{
Message message = new Message();
message.obj = "Total : 10, Thank you";
handler.sendMessage(message);
}
}
}
});
ThreadRecording.start();
您只能在UI线程中修改视图,您需要使用处理程序,例如
Handler h = new Handler(context.getMainLooper()) {
public void handleMessage(Message msg) {
TextView loog = (TextView)findViewById(R.id.textView1);
loog.setText(msg.obj);
}
};
Thread ThreadRecording = new Thread(new Runnable() {
public void run() {
while(recorder)
{
if (body_num = 10)
{
Message message = new Message();
message.obj = "Total : 10, Thank you";
handler.sendMessage(message);
}
}
}
});
ThreadRecording.start();
只有创建视图层次结构的原始线程才能接触其视图
因为只有使用UI(主)线程,您才能操作视图。您可以使用Hanlder更新视图
处理程序有两种主要用途:
--来自“developer.android.com”
new Thread() {
public void run() {
while(recorder)
{
if (body_num = 10)
{
messageHandler.sendEmptyMessage(0);
}
}
}
}.start();
放置在主线程中的处理程序:
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
//update your view here
}
};
只有创建视图层次结构的原始线程才能接触其视图
因为只有使用UI(主)线程,您才能操作视图。您可以使用Hanlder更新视图
处理程序有两种主要用途:
--来自“developer.android.com”
new Thread() {
public void run() {
while(recorder)
{
if (body_num = 10)
{
messageHandler.sendEmptyMessage(0);
}
}
}
}.start();
放置在主线程中的处理程序:
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
//update your view here
}
};
这也可以通过使用异步任务来实现。下面是在TextView中设置字符串资源(R.string.your_text)的示例代码:
public class CommonSetText extends AsyncTask<Void, Void, Integer> {
private WeakReference<TextView> textView;
private int stringID;
public CommonSetText ( TextView textView, Integer stringID) {
this.textView = new WeakReference<>(textView);
this.stringID = stringID;
}
@Override
protected Integer doInBackground ( Void... voids ) {
return stringID;
}
@Override
protected void onPostExecute ( Integer stringID ) {
super.onPostExecute ( stringID );
textView.get ().setText ( stringID );
}
}
这也可以通过使用异步任务来实现。下面是在TextView中设置字符串资源(R.string.your_text)的示例代码:
public class CommonSetText extends AsyncTask<Void, Void, Integer> {
private WeakReference<TextView> textView;
private int stringID;
public CommonSetText ( TextView textView, Integer stringID) {
this.textView = new WeakReference<>(textView);
this.stringID = stringID;
}
@Override
protected Integer doInBackground ( Void... voids ) {
return stringID;
}
@Override
protected void onPostExecute ( Integer stringID ) {
super.onPostExecute ( stringID );
textView.get ().setText ( stringID );
}
}
请参阅此处(如果仅搜索错误消息,可能会找到重复的/解决方案。请以后再试)。注意:1-
ThreadRecording
是类Thread
的实例,因此其名称应以小写字母IEThreadRecording
开头。2-您可以跳过声明线程
,而只需要新线程(newrubbable(){/*contents…*/})代码>请参阅此处(如果仅搜索错误消息,可能会找到重复的/解决方案。请以后再试)。注意:1-ThreadRecording
是类Thread
的一个实例,因此其名称应以小写字母IEThreadRecording
开头。2-您可以跳过声明线程
,而只需要新线程(newrubbable(){/*contents…*/})代码>这就是我想要的,谢谢!!这就是我想要的,谢谢!!这就是我想要的,谢谢!!这就是我想要的,谢谢!!