2012-01-14 5 views
1

doinbackground에 "Scores Activity"를 보내고 스코어 활동에서 함수를 실행했지만 "뷰 계층 구조를 만든 원래 스레드 만 해당 뷰를 만질 수 있습니다." "birinci.setText (txt);" 선.안드로이드 컨텍스트 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

오류 메시지는 이미 답변을 제공합니다.보기를 만들지 않은 스레드에서보기를 만질 (편집/수정/업데이트/etc.) 수 없습니다. AsyncTask의 doInBackgrund(...)에서 실행되는 것은 별도의 스레드에 의해 수행되므로 아무 것도 직접 볼 수 없습니다.

솔루션은 매우 간단합니다. 필요에 따라 AsyncTask에서 제공하는 다른 방법을 무시하십시오. 모든 작업이 완료된 후에보기를 업데이트하려는 경우 onPostExecute(...)을 무시하십시오. 백그라운드에서 작업이 진행되는 동안 진행 상황을 나타내려면 onProgressUpdate(...)을 사용하십시오. 거기에있는 모든 것은 (모든보기를 만든) 기본 UI 스레드에 의해 실행되고 있습니다.

documentation on AsyncTask을 통해 읽으십시오. 다른 단계와 가능성을 매우 명확하게 설명하고 있기 때문입니다.

+0

옙 내 실수! myScores를 넣습니다 .setScoreListUpdate (result); postExecute on 잘 작동합니다. 당신의 도움을 주셔서 감사합니다 – Mert

관련 문제