2011-01-22 7 views
0

RSS 피드를 가져 오는 동안 불확실한 ProgressDialog를 표시하려고합니다. 대화 상자가 나타납니다. 결과가 반환 되 자마자 강제로 닫습니다. 내 의혹은 어댑터가 채워지고 UI를 업데이트한다는 것입니다. 코드는 다음과 같습니다. 내 의심이 맞습니까?Android Force Close on ProgressDialog

 public void getRSS(String rss) 
    { 

     new GetRSS().execute(rss); 

    } 
    private class GetRSS extends AsyncTask<String, Void, Void> 
    { 
     private ProgressDialog Dialog = new ProgressDialog(View2.this); 

     protected void onPreExecute() { 

      Dialog.setMessage("Please wait..."); 
      Dialog.show(); 
     } 

     protected void onPostExecute(Void nothing) 
     { 
      Dialog.dismiss(); 
     } 

     protected Void doInBackground(String... rss) { 
     URL feedUrl; 
     try 
      { 
       feedUrl = new URL(rss[0]); 

       SyndFeedInput input = new SyndFeedInput(); 
       SyndFeed feed = input.build(new XmlReader(feedUrl)); 
       List entries = feed.getEntries(); 

       Iterator iterator = entries.listIterator(); 
       while (iterator.hasNext()) 
        { 
         SyndEntry ent = (SyndEntry) iterator.next(); 
         String title = ent.getTitle(); 
         //String uri = ent.getUri(); 
         //d.add(uri); 

         SyndContent content = (SyndContent)ent.getContents().get(0); 
         d.add(content.getValue()); 
         adapter.add(title); 
        } 
       adapter.notifyDataSetChanged(); 
      } 
     catch (MalformedURLException e) 
      { 
       e.printStackTrace(); 
      } 
     catch (IllegalArgumentException e) 
      { 
       e.printStackTrace(); 
      } 
     catch (FeedException e) 
      { 
       e.printStackTrace(); 
      } 
     catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     return null; 
     } 
    } 
    */ 

여기에 스택 덤프가 있습니다. 분명히 notify를 호출하면 문제가 발생합니다. 지금은 어디서 통지 전화를 알아내는 데 문제 : 02 :

01-22 12:02:28.701: ERROR/WindowManager(571): Activity com.digthisband.dtb.jg.View2 has leaked window [email protected] that was originally added here 

12월 1일에서 22일까지 28.701을 : android.view.WindowLeaked :/창 관리자 (571) ERROR 활동 com.digthisband.dtb. jg.View2가 처음 여기에 추가 된 [email protected] 창을 유출했습니다. 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.view.ViewRoot. (ViewRoot.java:247) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.view.WindowManagerImpl.addView (WindowManagerImpl.java:148) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.view.WindowManagerImpl.addView (WindowManagerImpl.java:91) 01-22 12 : 02 : 28.701 : 오류/WindowManager (571) : android.view.Window $ LocalWindowManager.addView (Window.java:424) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.app.Dialog.show (Dialog.java:241) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : com.digthisband.dtb.jg.View2 $ GetRSS.onPreExecute (View2.java:97) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.os.AsyncTask.execute (AsyncTask.java:391) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : com.digthisband.dtb.jg.View2.getRSS에서 (View2 .java : 87) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : com.digthisband.dtb.jg.View2.onCreate (View2.java:68) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.app.ActivityThre 활성/무효화/무효화 (ActivityThread.java:2627) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 01-22 12:02 : 28.701 : ERROR/WindowManager (571) : android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.app.ActivityThread $ H .handleMessage (ActivityThread.java:2033) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.os.Handler.dispatchMessage (Handler.java:99) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.os.Looper.loop (Looper.java:123) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : android.app.ActivityThread.main (ActivityThread .java : 4627) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : java.lang.reflect. Method.invokeNative (네이티브 메소드) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : java.lang.reflect.Method.invoke (Method.java:521) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 01-22 12 : 02 : 28.701 : ERROR/WindowManager (571) : com.android에서 .internal.os.ZygoteInit.main (ZygoteInit.java:626) 01-22 12 : 02 : 28.701 : ERROR/창 관리자 (571) : dalvik.system.NativeStart.main (기본 방법)에서

답변

0

그것은 것 LogCat 오류를 표시 할 수 있다면 가장 좋을 것입니다. 예외가 발생한 원인을 알려줍니다. doInBackground 메서드에서 notifyDataSetChanged()를 호출하는 것으로 나타났습니다.이 메서드는 UI 스레드에서만 호출해야합니다.

+0

틀림없이 - notifyDataSetChanged에 대한 호출을 제거했으며 충돌이 사라졌습니다. 나는 또한 나의 자료를 얻지 않는다. 그러나 그것은 시작입니다 ... – voodoobilly

+0

여기에 덤프가 있습니다 : – voodoobilly

+0

Heh ... 음, 네.표준 일은 대신 publishProgress()를 호출하는 것입니다. 그러면 UI 스레드에서 onProgressUpdate()가 자동으로 호출됩니다.이 스레드는 notifyDataSetChanged()를 호출 할 수있는 곳입니다. onProgressUpdate()를 재정의해야합니다. – Jems