我发送了“Scores Activity”到doinbackground然后在Scores Activity上运行一个函数但是得到了 “只有创建视图层次结构的原始线程才能触及其视图。”在“birinci.setText(txt);”线。
我在这里看到的是什么看起来使用相同的上下文?
Scores Activity
{
Object[] stuff = {this.dhn, Scores.this};
ConnectXML runXML = new ConnectXML();
runXML.execute(stuff);
}
public void setScoreListUpdate(String txt)
{
birinci.setText(txt);
}
private Scores myScores;
protected String doInBackground(Object... arguments) {
myScores = (Scores)stuff[1];
myScores.setScoreListUpdate(result);
}
答案 0 :(得分:1)
错误消息已经给出答案:您无法触摸(编辑/修改/更新/等)来自未创建它们的线程的任何视图。由于在AsyncTask的doInBackgrund(...)
中执行的任何操作都是由一个单独的线程完成的,因此您无法在那里进行任何直接视图操作。
解决方案非常简单:根据您的需要覆盖AsyncTask提供的其他方法。如果您在完成所有工作后尝试更新视图,只需覆盖onPostExecute(...)
即可。如果您想在后台完成工作时指出某种进展,请使用onProgressUpdate(...)
。其中的所有内容都由主UI线程(创建所有视图)执行。
请仔细阅读documentation on AsyncTask,因为它非常清楚地描述了不同的步骤和可能性。