Aller au contenu

Thread et interaction avec l'interface


Invité

Recommended Posts

Bonjour à tous,

Développeur androïde depuis 2 semaines, je cherche à utiliser un Thread car je dois dans un premier temps localiser l'utilisateur puis uploader des images pour remplir une liste.

J'ai pour le moment fais tous ces traitements les uns à la suite des autres mais le problème c'est que ma progressDialog se fige au moment où je récupère du serveur les images. C'est la méthode

afficherAdresse(); qui prends du temps et qui rempli une listView

J'ai essayé de mettre ne place un thread mais sans succès.

Voici un bout de mon code


public class ResultByLocalisation extends Activity implements LocationListener{
private LocationManager lManager;
private Location location;
private ProgressDialog progressDialog;

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	progressDialog = new ProgressDialog(this);
	progressDialog.setMessage("Localisation en cours");
	setContentView(R.layout.resultbylocalisation);

	//On récupère le service de localisation
	lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
	obtenirPosition();
}
  private void obtenirPosition() {
//Affiche la progressdialog
 progressDialog.show();

 //On demande au service de localisation de nous notifier tout changement de position
 //sur la source (le provider) choisie, toutes les minutes (60000millisecondes).
 //Le paramètre this spécifie que notre classe implémente LocationListener et recevra
 //les notifications.
 lManager.requestLocationUpdates("network", 600, 0, this);
}

public void onLocationChanged(Location location) {
 //Lorsque la position change...
 Log.d("Tuto géolocalisation", "La position a changé.");
 //... on sauvegarde la position
 this.location = location;
 //... on l'affiche - C'est cette méthode qui est trés longue et qui rempli une listview
 afficherAdresse();
 //... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
 lManager.removeUpdates(this);
}

Merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Tu as regardé du côté des AsyncTask et IntentService? Ils ont été spécialement mis en place pour Android contrairement aux threads classiques.

Pour ma part, je me suis basé sur ce tuto pour implémenter un IntentService.

Le principe:

- créer un intentservice et implémenter la seule méthode onHandleIntent qui fera le traitement en tache de fond

- tu lances ce service depuis ton activité grâce à la méthode startService

- pour mettre à jour ta ProgresDialog, tu fais un sendBroadCast depuis ton service.

- le message sera reçu par une classe interne étendant BroadcastReceiver dans ton actvité qui pourra mettre à jour ta ProgressDialog.

N'oublie pas de déclarer ton service dans le manifest et d'enregistrer ton BroadcastReceiver dans la méthode onResume de ton activité

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...