2012-01-14 27 views
1

我送「活動分數」到doinbackground然後在成績的活動運行的功能,但得到 「只有創建視圖層次可以觸摸其觀點原來的線程。」關於「birinci.setText(txt);」線。Android的語境薪火doInBackground

我在這裏丟失了什麼看起來使用相同的上下文?

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

錯誤消息已經給出了答案:您不能觸摸(編輯/修改/更新/等)來自未創建它們的線程的任何視圖。由於AsyncTask的doInBackgrund(...)中執行的任何操作都是由單獨的線程完成的,因此您無法在其中執行任何直接視圖操作。

解決方案很簡單:根據您的需要重寫AsyncTask提供的其他方法。如果您在完成所有工作後嘗試更新視圖,只需覆蓋onPostExecute(...)即可。如果要在後臺完成工作時指示某種進度,請使用onProgressUpdate(...)。所有內容都由主UI線程執行(創建所有視圖)。

請仔細閱讀documentation on AsyncTask,因爲它很清楚地描述了不同的步驟和可能性。

+0

是的,我的錯!我把myScores.setScoreListUpdate(result);關於postExecute的 其工作正常。謝謝你的幫助 – Mert 2012-01-15 00:38:09