2013-01-13 3 views
0

일부 RSS 데이터를 ListView에 표시하려고합니다. 비동기 작업 클래스에서 제공하는 onProgressUpdate() 메소드를 읽었습니다.RSS 데이터로 목록 업데이트

XML의 각 항목을 검색 할 때이 방법을 사용하여 목록보기를 업데이트 할 수 있는지 궁금합니다.

@Override 
    protected void onProgressUpdate(Integer... values) { 
     adapter.notifyDataSetChanged(); 

    } 

나는이 오류가 무엇입니까 : android.view.ViewRootImpl $ CalledFromWrongThreadException :

을에 의한 접촉 할 수있는 뷰 계층을 생성 만 원래 스레드

나는 여기에 방법을 오버라이드 그것의 전망.

내가 잘못 가고있는 아이디어가 있습니까?

편집 :이 오류는 doInBackground() 메서드 내부의 백그라운드 스레드 내에서 UI 스레드를 업데이트하려고 시도하여 생성되었다는 내용의 기사를 읽었습니다. 제 경우에는 doInBackground() 방법으로 onProgressUpdate()으로 전화를 걸고 있습니다. 각 항목을 다운로드 할 때 목록의 채우기 효과를 추가하려고했습니다.

내가 어떻게 이것을 달성 할 수 있었는지에 대한 제안은 훌륭 할 것입니다!

로그인 고양이 :

01-13 00:41:09.195: E/AndroidRuntime(32239): FATAL EXCEPTION: AsyncTask #1 
01-13 00:41:09.195: E/AndroidRuntime(32239): java.lang.RuntimeException: An error occured while executing doInBackground() 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.lang.Thread.run(Thread.java:856) 
01-13 00:41:09.195: E/AndroidRuntime(32239): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:823) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.View.requestLayout(View.java:15468) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.View.requestLayout(View.java:15468) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.View.requestLayout(View.java:15468) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.View.requestLayout(View.java:15468) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:318) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.view.View.requestLayout(View.java:15468) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.widget.AbsListView.requestLayout(AbsListView.java:1819) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:813) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.widget.AbsListView$AdapterDataSetObserver.onChanged(AbsListView.java:5958) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.widget.BaseAdapter.notifyDataSetChanged(BaseAdapter.java:50) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.widget.ArrayAdapter.notifyDataSetChanged(ArrayAdapter.java:286) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at com.example.simplerss.MainActivity$PostTask.onProgressUpdate(MainActivity.java:148) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at com.example.simplerss.MainActivity$PostTask.doInBackground(MainActivity.java:123) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at com.example.simplerss.MainActivity$PostTask.doInBackground(MainActivity.java:1) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
01-13 00:41:09.195: E/AndroidRuntime(32239): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
01-13 00:41:09.195: E/AndroidRuntime(32239): ... 4 more 
+0

전체 StackTrace를 추가하십시오. –

답변

2

In my case I am calling the onProgressUpdate() in the doInBackground() method.

대신 publishProgress()를 호출해야합니다. 백그라운드 스레드에서 계속 실행중인 onProgressUpdate()을 직접 호출하면 실패합니다.

AsyncTask documentation을 한 번 살펴보아야합니다.

+0

트릭을 고마워! – Javacadabra

관련 문제