Comment mettre à jour listview après l'appel de Asynctask pour appeler un webservice
Je vais appeler un webservice
par asynctask
, à l'appel de la webservice
je suis d'appeler une méthode nommée makeRequest()
dans doInBackground()
, je reçois la réponse dans un autre méthodes success()
, Dans le succès de la méthode que je mets à jour le listview
Mais j'obtiens le message d'erreur tel que
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views."
Ici Im ajouter mon code.Im appel synctask
de l'activité
new MyTask(this,urlAsString,sp).execute();
ici est la classe Asynctask
class MyTask extends AsyncTask<Void, Void, Void> {
ProgressDialog progress;
String url;
SharedPreferences sp;
HomepageH2desk c;
public MyTask(HomepageH2desk context,String url,SharedPreferences sp) {
this.c = context;
this.url = url;
this.sp = sp;
progress = new ProgressDialog(this.c);
progress.setMessage("Loading...");
}
public void onPreExecute() {
progress.show();
}
public Void doInBackground(Void... unused) {
c.getTickets(url,sp);
return null;
//progress.setMessage("Loading...");
}
public void onPostExecute(Void unused) {
progress.dismiss();
}
}
Ici im obtenir webservice
réponse
public void success(Object result) {
list = (ArrayList<Map<String, String>>) result;
this.adapter.setList(list);
this.adapter.notifyDataSetChanged();
}
listview
n'est pas mis à jour et montrant erreur
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
M'aider à résoudre ce problème...
d'où vous appelez pour informer l'ensemble de données a changé ???
OriginalL'auteur Aju | 2011-08-03
Vous devez vous connecter pour publier un commentaire.
Vous devez mettre à jour votre Liste comme ça.
parce qu'il exécute dans le thread principal, de sorte qu'il ne peut causer de l'ANR dialogue ?
OriginalL'auteur Lalit Poptani
Depuis cette erreur qui apparaît lorsque vous faites un peu de MainThread tâche dans un autre thread.....
essayez Ceci:
Ce code peut avoir quelques erreurs, Mais dans des Mots simples.. ajouter le notifyDataSetChanged appel en runOnUiThread() la méthode. Vous sera Fait..
OU cela peut aussi être Fait ( le moyen idéal )
ajoutez la ligne suivante dans votre classe d'activité
Appel de ce gestionnaire quand et où vous voulez l'appeler le notifydatasetchanged comme ce
Merci
sHaH
hmmm alors u peut Marquer corriger si ça Vous aide ?? et aussi de Voter 🙂
hey, si elle a aidé u pouvez marquer cette réponse comme Correcte...
OriginalL'auteur Shah
appeler la méthode succès sur onPostExecute méthode
Vous appelez de l'extérieur du thread d'INTERFACE utilisateur pour la mise à jour de l'INTERFACE utilisateur.appelez la méthode de onPostExecute.C'est dans le même thread d'INTERFACE utilisateur
OriginalL'auteur Rasel