我有一个程序,我要访问一个网站,抓取XML并解析,非常简单。
这里的代码运行得很好,它是在onCreate方法
中启动的final Handler handler = new Handler(){
public void handleMessage(Message msg){
progDialog.dismiss();
parse(xmlOut);
}};
progDialog = ProgressDialog.show(this, "Working...", "Doing something...");
thread = new Thread()
{
public void run(){
xmlOut = doSomeFunction(todaysDate);
handler.sendEmptyMessage(0);
}};
thread.start();
然后我在页面上有一个按钮,如果用户选择不同的日期重新加载数据,无法重新运行相同的线程,所以我只是复制了完全相同的代码,更改了所有变量名称并将其放入int用于Button的OnClickListener。
当我点击按钮时,我得到一个例外并获得此
android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
做错了什么但不确定究竟是什么。我不会写太多线程程序,所以我确信我错过了一些东西。
答案 0 :(得分:0)
所有UI更改都应该从该线程中的相同线程或处理程序或AsyncTask完成。 Check this post阅读一些关于android中的AsyncTasks的内容。
我猜你没有正确执行Button声明,或者你是从另一个线程设置事件。这会给你这个错误。如果你仍然被击中,那么在这里发布相关代码,我可以尝试更好地帮助你。