2011-01-22 5 views
0

Je tente d'afficher un ProgressDialog indéterminé en saisissant un flux RSS. Je fais apparaître la boîte de dialogue, mais dès que les résultats sont renvoyés, j'obtiens une force proche. Mon soupçon est que l'adaptateur est rempli et va mettre à jour l'interface utilisateur. Le code est ci-dessous. Est-ce que mes soupçons sont corrects?Android Force Close sur 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; 
     } 
    } 
    */ 

est ici la décharge de la pile - clairement l'appel d'informer est la question. Maintenant, je suis juste de la difficulté à déterminer où appeler notifier:

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 

01-22 12: 02: 28,701: ERREUR/WindowManager (571): android.view.WindowLeaked: Activité com.digthisband.dtb. jg.View2 a fui la fenêtre com.a[email protected] qui a été ajouté à l'origine ici 01-22 12: 02: 28.701: ERROR/WindowManager (571): at android.view.ViewRoot. (ViewRoot.java:247) 01-22 12: 02: 28.701: ERROR/WindowManager (571): à l'adresse android.view.WindowManagerImpl.addView (WindowManagerImpl.java:148) 01-22 12: 02: 28.701: ERROR/WindowManager (571): at android.view.WindowManagerImpl.addView (WindowManagerImpl.java:91) 01-22 12: 02: 28.701: ERREUR/WindowManager (571): à l'adresse android.view.Window $ LocalWindowManager.addView (Window.java:424) 01-22 12: 02: 28.701: ERROR/WindowManager (571): à l'adresse android.app.Dialog.show (Dialog.java:241) 01-22 12: 02: 28.701: ERROR/WindowManager (571): à l'adresse com.digthisband.dtb.jg.View2 $ GetRSS.onPreExecute (View2.java:97) 01-22 12: 02: 28.701: ERROR/WindowManager (571): at 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): à l'adresse com.digthisband.dtb.jg.View2.onCreate (View2.java:68) 01-22 12: 02: 28.701 : ERREUR/WindowManager (571): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 01-22 12: 02: 28.701: ERREUR/WindowManager (571): at android.app.ActivityThre ad.performLaunchActivity (ActivityThread.java:2627) 01-22 12: 02: 28.701: ERREUR/WindowManager (571): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 01-22 12:02: 28.701: ERREUR/WindowManager (571): at android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 01-22 12: 02: 28.701: ERREUR/WindowManager (571): at android.app.ActivityThread $ H .handleMessage (ActivityThread.java:2033) 01-22 12: 02: 28.701: ERROR/WindowManager (571): à l'adresse android.os.Handler.dispatchMessage (Handler.java:99) 01-22 12: 02: 28.701 : ERREUR/WindowManager (571): at android.os.Looper.loop (Looper.java:123) 01-22 12: 02: 28.701: ERREUR/WindowManager (571): at android.app.ActivityThread.main (ActivityThread .java: 4627) 01-22 12: 02: 28.701: ERROR/WindowManager (571): à java.lang.reflect. Method.invokeNative (méthode native) 01-22 12: 02: 28.701: ERROR/WindowManager (571): à java.lang.reflect.Method.invoke (Method.java:521) 01-22 12: 02: 28.701 : ERREUR/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) 1 au 22 décembre: 02: 28,701: eRREUR/WindowManager (571): à dalvik.system.NativeStart.main (native Method)

Répondre

0

Il serait être mieux si vous pouviez montrer l'erreur LogCat, il dira ce qui a causé l'exception. J'ai également remarqué que vous appeliez notifyDataSetChanged() dans la méthode doInBackground - vous ne devriez l'appeler que dans le thread de l'interface utilisateur.

+0

Vous avez absolument raison - J'ai retiré l'appel à notifyDataSetChanged et le crash est parti. Je ne reçois pas mes données non plus. Mais c'est un début ... – voodoobilly

+0

Voici la décharge: – voodoobilly

+0

Heh ... eh bien, oui.La chose standard à faire est d'appeler publishProgress() à la place. Celui-ci appelle automatiquement onProgressUpdate() automatiquement dans le thread de l'interface utilisateur, où vous pouvez appeler notifyDataSetChanged(). Vous devrez remplacer onProgressUpdate(). – Jems