Android上下文在doInBackground上传递
我将“分数活动”发送到doinbackground,然后对分数活动运行一个函数,但得到 “只有创建视图层次结构的原始线程才能接触其视图。” 使用相同的上下文,我在这里遗漏了什么Android上下文在doInBackground上传递,android,Android,我将“分数活动”发送到doinbackground,然后对分数活动运行一个函数,但得到 “只有创建视图层次结构的原始线程才能接触其视图。” 使用相同的上下文,我在这里遗漏了什么 Scores Activity { Object[] stuff = {this.dhn, Scores.this}; ConnectXML runXML = new ConnectXML(); runXML.execute(stuff); } public void setScoreListUpdate(String
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);
}
错误消息已经给出了答案:您不能从未创建视图的线程中触摸(编辑/修改/更新等)任何视图。由于在AsyncTask的
doInBackgrund(…)
中执行的任何操作都是由单独的线程完成的,因此您不能在其中执行任何直接视图操作
解决方案非常简单:根据需要覆盖AsyncTask提供的其他方法。如果您试图在所有工作完成后更新视图,只需覆盖onPostExecute(…)
。如果要在后台完成工作时指示某种进度,请使用onProgressUpdate(…)
。其中的所有内容都由主UI线程(创建所有视图)执行
请通读,因为它非常清楚地描述了不同的步骤和可能性。错误消息已经给出了答案:您不能从未创建视图的线程中触摸(编辑/修改/更新等)任何视图。由于在AsyncTask的
doInBackgrund(…)
中执行的任何操作都是由单独的线程完成的,因此您不能在其中执行任何直接视图操作
解决方案非常简单:根据需要覆盖AsyncTask提供的其他方法。如果您试图在所有工作完成后更新视图,只需覆盖onPostExecute(…)
。如果要在后台完成工作时指示某种进度,请使用onProgressUpdate(…)
。其中的所有内容都由主UI线程(创建所有视图)执行
请通读,因为它非常清楚地描述了不同的步骤和可能性。是的,我错了!我把myScores.setCoreListUpdate(结果)放进去;在执行后,它工作得很好。谢谢你的帮助。请原谅我的错误!我把myScores.setCoreListUpdate(结果)放进去;在执行后,它工作得很好。谢谢你的帮助