IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Tri d'un ArrayList


Sujet :

Android

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut Tri d'un ArrayList
    Bonjour tout le monde,
    J'ai triée une liste d'objet selon un attribut de l'objet qui la constitue.
    Ensuite j'essaie d'afficher des autres attributs mais j'obtient toujours l'ordre des éléments de la liste avant le trie .
    Il n'y a pas des erreurs dans mon logcat et voila mon code de trie et d'affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    	protected void onPostExecute(JSONObject json) {
     
    						try {
     
    							// récupérer le tableau lignes
    							JSONArray lignes = json.getJSONArray(TAG_rows);
    							// récupérer le tableau elements
    							JSONObject elements = lignes.getJSONObject(0);
    							JSONArray results = elements.getJSONArray(TAG_elements);
    							// parcourir toute la liste des employés
    							for(int i = 0; i < results.length(); i++){
    					 			// récupérer un element de type JSONObject
    								JSONObject el = results.getJSONObject(i);
    								// récupérer le JSONObject Distance qui contient deux items
    								JSONObject dist = el.getJSONObject(TAG_distance);
    								String value = dist.getString(TAG_value);
    								int val_dist=Integer.parseInt(value);
    								myList.get(i).setDistance(val_dist);
    							}
    			}
     
     
    						catch(JSONException e)
    						{
    							e.printStackTrace();
    						}
    					};
     
    				}.execute();
    			}
    		Collections.sort(this.myList, Place.DST_COMPARATOR);
     
    		for(int i=0;i<myList.size();i++)
    		{
    			HashMap<String, String> map = new HashMap<String, String>();
    			map.put("id",  String.valueOf(i));
    			map.put("name",myList.get(i).getNom());
    			map.put("adresse", myList.get(i).getAdresse());
    			list.add(map);
    		}
    		  ListAdapter adapter = new SimpleAdapter(this, list , R.layout.activity_trie, 
                      new String[] { "name", "adresse" }, 
                      new int[] { R.id.item_title, R.id.item_subtitle });
     
      setListAdapter(adapter);
      final ListView lv = getListView();
      lv.setTextFilterEnabled(true);	
      lv.setOnItemClickListener(new OnItemClickListener() {
      	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        		
      		HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);	        		
      		Toast.makeText(Trie.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 
     
    		}
    	});
    		}

    Aidez moi s'il vous plait et merci d'avance .

  2. #2
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Si le tri n'est pas correcte c'est que votre comparateur ne l'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(this.myList, Place.DST_COMPARATOR);
    Quel est le code de votre comparateur "Place.DST_COMPARATOR" ?

  3. #3
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Merci pour votre réponse jdevbe.
    voila mon code de comparateur dans la classe Place.java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    package com.example.projet_fin_etude;
     
     
     
     
     
     
     
    import java.io.Serializable;
    import java.util.Comparator;
     
     
     
     
    public class Place implements Serializable  {
     
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -581071003550724327L;
    	/**
             * 
             */
     
    	private String reference;
    	private String nom;
    	private String adresse ;
    	private double latitude ;
    	private double longitude;
    	private int distance;
    	public Place()
    	{
     
    	}
    	public Place(String reference,String nom,String adresse,double latitude, double longitude, int distance)
    	{
    		this.reference=reference;
    		this.nom=nom;
    		this.adresse=adresse;
    		this.latitude=latitude;
    		this.longitude=longitude;
    		this.distance=distance;
     
    	}
     
     
     
    	public String getReference() {
    		return reference;
    	}
     
    	public void setReference(String reference) {
    		this.reference = reference;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getAdresse() {
    		return adresse;
    	}
     
    	public void setAdresse(String adresse) {
    		this.adresse = adresse;
    	}
    	public double getLatitude() {
    		return latitude;
    	}
     
    	public void setLatitude(double latitude) {
    		this.latitude = latitude;
    	}
    	public double getLongitude() {
    		return longitude;
    	}
     
    	public void setLongitude(double longitude) {
    		this.longitude = longitude;
    	}
    	public int getDistance() {
    		return distance;
    	}
     
    	public void setDistance(int distance) {
    		this.distance = distance;
    	}
     
     
     
    	public static final Comparator<Place> DST_COMPARATOR = new Comparator<Place>() {
     
     
    		@Override
    		public int compare(Place arg0, Place arg1) {
    			// TODO Auto-generated method stub
    			Place p=(Place) arg0;
    			Place q=(Place) arg1;
    			  if(p.distance == q.distance)
    			  {    
    				  return 0;
    			  }  else if (p.distance > q.distance)  return 1;
    			  else return -1;				
    		}
     
     
     
        };
     
     
     
     
     
     
    }

  4. #4
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Le comparateur semble correcte.
    Éventuellement il peut être simplifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static final Comparator<Place> DST_COMPARATOR = new Comparator<Place>() {
      @Override
      public int compare(Place arg0, Place arg1) {
         return arg0.distance - arg1.distance;
    }
    Est-ce bien sur le champ 'distance' que vous souhaitez trier ?
    Car dans la vue je ne voit que "name" et "adresse"...

  5. #5
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Merci bien,
    Je veux afficher les noms et les adresses les plus proches en distance de l'utilisateur .Mais est ce que si je vais afficher la distance l'erreur va être corriger?
    Si vous avez plus des idées , aidez moi .

  6. #6
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Arwa89 Voir le message
    Je veux afficher les noms et les adresses les plus proches en distance de l'utilisateur .Mais est ce que si je vais afficher la distance l'erreur va être corriger?
    Non l'erreur restera, mais cela permettra de voir quelle est la valeur de 'distance' . Peut-être que le tri est correct mais la valeur n'est pas la valeur de 'distance'...

  7. #7
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonsoir,
    Merci pour vos conseils . J'ai affichée les valeurs de distances et je les trouve tous à zéros.J'ai affichée aussi les valeurs des distances récupérées de mon fichiers json et je l'ai trouvée justes .Alors je constates que ma faute provient de l'affectation de la valeur de distance dans la liste c'est à dire à cet emplacement du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int val_dist=Integer.parseInt(value);
    	   myList.get(i).setDistance(val_dist);
    Avez vous des idées pour corriger ces instructions et merci d'avance .

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    pouvez vous nous afficher les valeurs de la String value??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String value = dist.getString(TAG_value);
    System.out.println(value);
    int val_dist=Integer.parseInt(value);							myList.get(i).setDistance(val_dist);

  9. #9
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    J'ai les déja affichées dans le logcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String value = dist.getString(TAG_value);
    								Log.d("value", value);
    Et l'affichage dans le logcat :
    04-21 17:41:19.379: D/value(1229): 0
    04-21 17:41:19.379: D/value(1229): 1764
    04-21 17:41:19.379: D/value(1229): 1095
    04-21 17:41:19.379: D/value(1229): 1058
    04-21 17:41:19.379: D/value(1229): 1326
    04-21 17:41:19.379: D/value(1229): 986
    04-21 17:41:19.379: D/value(1229): 1642
    04-21 17:41:19.379: D/value(1229): 2000
    04-21 17:41:19.389: D/value(1229): 1291
    04-21 17:41:19.389: D/value(1229): 705
    04-21 17:41:19.399: D/value(1229): 1351
    04-21 17:41:19.399: D/value(1229): 1971
    04-21 17:41:19.399: D/value(1229): 1044
    04-21 17:41:19.409: D/value(1229): 0
    04-21 17:41:19.409: D/value(1229): 831
    04-21 17:41:19.409: D/value(1229): 1254
    04-21 17:41:19.419: D/value(1229): 1001
    04-21 17:41:19.419: D/value(1229): 1292
    04-21 17:41:19.419: D/value(1229): 2095
    04-21 17:41:19.419: D/value(1229): 1053

    Merci pour vos aides

  10. #10
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour tout le monde,
    Je viens de modifier mon code de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int val_dist=Integer.parseInt(value);
     
    								Place p = new Place(myList.get(i).getReference(),myList.get(i).getNom(),myList.get(i).getAdresse(),myList.get(i).getLatitude(),myList.get(i).getLongitude(),val_dist); 
    								myList.set(i,p);			Log.d("objet",myList.get(i).toString());
    							}
    			}
     
     
    						catch(JSONException e)
    						{
    							e.printStackTrace();
    						}
    					};
     
    				}.execute();
    			}
    		Collections.sort(myList, Place.DST_COMPARATOR);
    		for(int i=0;i<myList.size();i++)
    		{
    			Log.d("objet",myList.get(i).toString());	
    		}
    Donc j'ai affichée les valeurs des objets de ma liste dans le logcat et j'ai trouvée que la valeur de l'attribut distance avant le trie est correcte mais après le trie tous les valeurs de cet attributs prennent la valeur zéro .
    Avez vous des idées s'il vous plait ?

  11. #11
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    J'ai découvert la raison pour la quelle les valeurs de l'attribut distance dans ma liste sont tous à zéro après le trie ce que la modification de l'attribut distance se fait dans le bloc d'Asyntask .Donc l'exécution du trie et l'affichage de la listView se fait avant l'exécution des instructions du bloc Asyntask .
    Je suis maintenant obligée d'actualiser ma listView dans li bloc Asyntask .
    Ce que je n'arrives pas à faire .
    Si quelqu'un avez des idées , aidez moi et merci pour vous .

  12. #12
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Tu notifies bien à ta liste que les données ont été modifié via un notifyDataSetChanged() ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  13. #13
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour Feanorin,
    Merci beaucoup pour votre aide .
    J'arrives à mettre à jour ma listView à partir du bloc Asyntask .
    Encore merci et voila mon code correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    protected void onPostExecute(JSONObject json) {
     
    						try {
     
     
    							// récupérer le tableau lignes
    							JSONArray lignes = json.getJSONArray(TAG_rows);
    							// récupérer le tableau elements
    							JSONObject elements = lignes.getJSONObject(0);
    							JSONArray results = elements.getJSONArray(TAG_elements);
    							// parcourir toute la liste des employés
    							for(int i = 0; i < results.length(); i++){
    					 			// récupérer un element de type JSONObject
    								JSONObject el = results.getJSONObject(i);
    								// récupérer le JSONObject Distance qui contient deux items
    								JSONObject dist = el.getJSONObject(TAG_distance);
    								String value = dist.getString(TAG_value);
    								Log.d("value", value);
    								int val_dist=Integer.parseInt(value);
     
    								Place p = new Place(myList.get(i).getReference(),myList.get(i).getNom(),myList.get(i).getAdresse(),myList.get(i).getLatitude(),myList.get(i).getLongitude(),val_dist,myList.get(i).getPhoto()); 
    								myList.set(i,p);
     
     
    							}
    							Collections.sort(myList, Place.DST_COMPARATOR);
    							for(int i=0;i<myList.size();i++)
    							{
    							Log.d("objet",myList.get(i).toString());
    							}
    							for(int i=0;i<myList.size();i++)
    							{
    								HashMap<String, String> map = new HashMap<String, String>();
    								map.put("id",  String.valueOf(i));
    								map.put("name",myList.get(i).getNom());
    								map.put("adresse", myList.get(i).getAdresse());
    								list.add(map);
    							}
    							ListAdapter adapter = new SimpleAdapter(Trie.this, list , R.layout.activity_trie, 
    						              new String[] { "name", "adresse" }, 
    						              new int[] { R.id.item_title, R.id.item_subtitle });
     
    							  setListAdapter(adapter);
     
    							  final ListView lv = getListView();
    							  lv.setTextFilterEnabled(true);	
    							  lv.setOnItemClickListener(new OnItemClickListener() {
    							  	public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    							  		@SuppressWarnings("unchecked")
    									HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
    							  		 Intent intent = new Intent(Trie.this,Info_Activity.class);
    							  		 intent.putExtra("ID", o.get("id"));
    							  		 intent.putExtra("myList", (Serializable)myList);
    							  		 intent.putExtra("latitude", Double.toString(lt));
    									   intent.putExtra("longitude", Double.toString(lg));
    							  		 startActivity(intent);
    							  }
    							  });

  14. #14
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Et sur ce code c'est quoi le problème ? car là je ne suis plus .
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  15. #15
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    Ce code est correcte .J'ai le mis pour aider autres personnes pour des problèmes similaires .
    Pour moi ,tout va bien et merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tri d'un ArrayList
    Par sos dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 19/03/2010, 06h40
  2. Tri d'un arrayList d'Object[]
    Par Lex92 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/09/2008, 17h47
  3. tri d une arraylist
    Par *alexandre* dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 22/09/2008, 11h03
  4. Tri d'une ArrayList de tableaux
    Par Alqualonde dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 20/12/2006, 16h22
  5. tri d'une arraylist d'interface
    Par dude666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/11/2006, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo