android - simple - onpostexecute async task




AsyncTask et setAdapter dans les méthodes onCreate (2)

Je fais des tâches réseau lourdes - télécharger des images (prévisualisations) - Pour que mon interface principale ne soit pas bloquée, je l'ai fait dans un AsyncTask, je veux les mettre dans un GridView mais je configure l'adaptateur avant la fin de l'AsyncTask. Du code sera plus utile

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.gridview);
            new LoadAllPictures().execute();
            GridView g = (GridView) findViewById(R.id.gridview);
            g.setAdapter(new ImageAdapter(this));
}

Donc, à la fin, le Logcat montre que tout avait été téléchargé mais rien sur mon écran. J'ai essayé de faire la partie setAdapter dans mon AsyncTask mais il me dit que: Only the original thread that created a view hierarchy can touch its views.

Que devrais-je faire ?


AsyncTask dispose de 3 méthodes de base:

protected void onPreExecute()
{
}

protected void onPostExecute(Void unused)   
{
  // displaying images
  // set adapter for listview with downloaded items
}

protected Void doInBackground(Void... params) 
{
     // downloading and time consuming task 
}

donc vous pouvez écrire g.setAdapter(new ImageAdapter(this)); à l'intérieur de la onPostExecute(Void unused) car, pour le moment, les images sont déjà téléchargées dans la méthode doInBackground() .


AsyncTask a une méthode utile que vous pouvez implémenter nommée onPostExecute() . Il est appelé à partir du thread d'interface utilisateur d'origine une fois la tâche terminée. Vous pouvez l'utiliser pour définir l'adaptateur à partir du bon thread.





android-gridview