Android上下文传递doInBackground

时间:2012-01-14 23:42:56

标签: android

我发送了“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);

}

1 个答案:

答案 0 :(得分:1)

错误消息已经给出答案:您无法触摸(编辑/修改/更新/等)来自未创建它们的线程的任何视图。由于在AsyncTask的doInBackgrund(...)中执行的任何操作都是由一个单独的线程完成的,因此您无法在那里进行任何直接视图操作。

解决方案非常简单:根据您的需要覆盖AsyncTask提供的其他方法。如果您在完成所有工作后尝试更新视图,只需覆盖onPostExecute(...)即可。如果您想在后台完成工作时指出某种进展,请使用onProgressUpdate(...)。其中的所有内容都由主UI线程(创建所有视图)执行。

请仔细阅读documentation on AsyncTask,因为它非常清楚地描述了不同的步骤和可能性。