2013-04-26 3 views
0

메인 클래스 A를 가지고 있는데,이 클래스에서 Asynctask를 확장하는 클래스 B 객체를 만듭니다. B의 doInBackground 지금 A. 콘텐츠보기를 설정 한, 나는의 텍스트 뷰를 업데이트 할, 그러나 그것은doINBackground android에서 텍스트 뷰 설정

Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

예외를 제공합니다. 나는 B에서 setcontentview를 선언하려했지만 아무 쓸모없는 사람이 B에서 A의 textview를 편집하는 방법을 알려줄 수 있습니까 ??

+0

에서 publishProgress를 호출은 AsyncTask를의 onPostExecute 기능에 그것을보십시오. – Triode

답변

2

당신은 UI 스레드에서 setText()를 호출해야하므로 하나 onPostExecute(), onPreExecute() 또는 onProgressUpdate()

에 당신은 또한 doInBackground()runOnUiThread() 핸들러를 사용할 수 있지만 패배의 종류 AsyncTask를 사용 목적.

+0

하지만,이 textview를 progressbar 업데이트와 같이 업데이트 할 예정이므로 백그라운드에서 수행해야합니다. – bharath

+1

@bharath 그런 다음'publishProgress()'를 사용하여 정보를'onProgressUpdate()'에 전달하고 거기에서 upadte하십시오. –

+0

하지만 게시 할 때 패스 번호를 사용할 수 없으며 공백 NA가 필요합니까? – bharath

0

doinBackgroud에서 사용자는 어떠한 변경도 수행하지 않아야합니다. 당신은 사후 실행에서해야하고 수행 할 수 있습니다. preexecute 또는 onProgressUpdate에서 알림을 설정할 수도 있습니다.

희망이 도움이 될 것입니다.

0

doInBackground는 작업 스레드입니다. UI 스레드에서보기를 처리했습니다. onPreExecute(), onPostExecute() 또는 onProgressUpdate으로하시기 바랍니다. 이 모든 것은 UI 스레드에서 작동합니다.

물론 onProgressUpdate으로 정수를 전달할 수 있습니다. 두 번째 paramters를 통지하십시오 : 텍스트 업데이트가 진행 정보와 함께 할 경우 AysncTask<Void, Integer, VOid>, 두 번째 매개 변수는 onProgressUpdate 매개 변수 유형을

+0

고마워요,하지만 진행 상황을 업데이 트에, 그것만이 공백을 허용, 내가 정수 값을 전달할 필요가 있습니까? – bharath

2

을 의미합니다, 당신은 그것에 대해 publishProgress()/onProgressUpdate()을 사용할 수 있습니다.

더 넓은 의미에서 진행 상황 업데이트가 아니라면 Raghav와 함께합니다. 그러면 다른 접근 방법을 고려해야합니다.

4

재정의 onProgressUpdate 및 doInBackground