当我想将Text设置为text View时,应用程序力关闭并给我这个错误:
android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触摸其视图。
这是我的代码的一部分:
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_num=body_num1
,线程会检查body_num==10
这也可以通过使用AsyncTask来实现。下面是在TextView中设置字符串资源(R.string.your\u 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 );
}
}
然后使用以下代码将文本设置为文本视图:
new CommonSetText ( textView, R.string.your_text ).execute ( );
您只能在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更新视图。
处理程序有两个主要用途:
例子:
背景Thread:
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
}
};
我读了其他帖子,但没有解决我的问题。我是Android的新手。我必须连接到MSSQL,但我得到了原始线程错误。我如何解决这个问题?谢谢 这是我的代码: 在KuyrugaEkle函数中,我动态更改布局,并且我在该函数中收到错误。 谢谢
我正在开发一个Android应用程序,我使用Eclipse作为IDE,我的数据库是MySQL。我有以下问题。当我试图通过AsynTask从数据库中获取数据时,出现了下面显示的错误。 活动: 异步任务:
我的应用程序中有一个简单的计时器,每3秒钟运行一次。如果它不在fragment类中,那么它可以完美地工作。但在片段中,我总是遇到一个错误:只有创建视图层次结构的原始线程才能接触其视图。
得到一个错误:android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触摸它的视图。 我真的不知道为什么。 谢谢帮忙。
我正在使用Android和PHP创建一个简单的登录应用程序,但我遇到了一个错误,有人能帮我吗?我正在尝试在Android作为客户端和PHP/MySQL作为服务器端之间建立关系,但仍然没有成功得到响应。
我有一个错误,只有创建视图层次结构的原始线程才能接触它的视图。但我不知道如何在多线程中处理ui,比如列表视图,我也不知道该放在哪里。