2010-06-16 6 views
1

J'écris une application Android. J'ai une méthode principale, qui crée et exécute un nouveau Thread en utilisant une classe Runnable interne anonyme. La méthode run(), lorsqu'elle est terminée, appelle une méthode sur sa classe parente (dans le thread principal) qui appelle notifyDataSetChanged() afin que le thread principal puisse redessiner les nouvelles données. Cela provoque toutes sortes de problèmes (ViewRoot $ CalledFromWrongThreadException). Le fait est que cette méthode appelée à partir du thread de travail est sur la classe qui est créée dans le thread de l'interface utilisateur. Cela ne devrait-il pas fonctionner sur le thread de l'interface utilisateur? Ou est-ce que je manque quelque chose?Java Thread Message Passing

Voici un code de ce dont je parle:

public class Mealfire extends Activity { 
    @Override 
    public void onCreate(Bundle icicle) { 
     (new Thread() { 
      public void run() { 
       // Do a bunch of slow network stuff. 
       update(); 
      } 
     }).start(); 
    } 

    private void update() { 
     myAdapter.notifyDatasetChanged(); 
    } 
} 

Répondre

2

Avez-vous essayé d'appeler le code de mise à jour de l'interface utilisateur avec Activity#runOnUiThread? Quelque chose comme ceci:

private void update() { 
    runOnUiThread(new Runnable() { 
     public void run() { 
      myAdapter.notifyDatasetChanged(); 
     } 
    } 
} 
+0

C'était exactement ce dont j'avais besoin. Je vous remercie! –