Comment imprimer toutes les clés et valeurs de HashMap dans Android?


Je suis très nouveau pour le développement Android, et j'essaie d'utiliser HashMap dans un exemple de projet Android. Maintenant, je fais un exemple de projet pour learn Android. Je stocke simplement les clés et les valeurs dans HashMap, je veux montrer les clés et leurs valeurs dans EditView. J'ai suivi le code ci-dessous dans mon exemple de projet. Mais, la première clé et la valeur ne s'impriment que dans EditView.

   Map<String, String> map = new HashMap<String,String>();
   map.put("iOS", "100");
   map.put("Android", "101");
   map.put("Java", "102");
   map.put(".Net", "103");

   Set keys = map.keySet();

   for (Iterator i = keys.iterator(); i.hasNext(); ) {
       String key = (String) i.next();
       String value = (String) map.get(key);
       textview.setText(key + " = " + value);
   }

Dans EditView iOS = 100 est seulement l'impression. Je veux imprimer toutes les clés et leur valeur dans EditText. Quelqu'un peut-il me dire où je fais de mal? Merci à l'avance.

Author: e-shfiyut, 2012-01-18

13 answers

Tout d'Abord, il y a des erreurs dans votre code, c'est à dire. il vous manque un point-virgule et une parenthèse fermante dans la boucle for.

Ensuite, si vous essayez d'ajouter des valeurs à la vue, vous devez utiliser textview.appendText(), au lieu de .setText ().

Il y a une question similaire ici: comment changer le texte dans Android TextView

 10
Author: Savino Sguera, 2017-07-20 20:28:11
for (Map.Entry<String,String> entry : map.entrySet()) {
  String key = entry.getKey();
  String value = entry.getValue();
  // do stuff
}
 178
Author: Shadow, 2012-01-18 12:10:09

C'est parce que votre TextView reçoit un nouveau texte à chaque itération et que la valeur previuos est rejetée. Concaténez les chaînes par StringBuilder et définissez la valeur TextView après la boucle. Vous pouvez également utiliser ce type de boucle:

for (Map.Entry<String, String> e : map.entrySet()) {
    //to get key
    e.getKey();
    //and to get value
    e.getValue();
}
 12
Author: muffinmad, 2012-01-18 12:16:12
HashMap <Integer,Integer> hm = new HashMap<Integer,Integer>();

Set<Integer> keys = hm.keySet();  //get all keys
for(Integer i: keys)
{
    System.out.println(hm.get(i));
}
 12
Author: Abhi, 2014-05-29 11:16:24

Avec Java 8:

map.keySet().forEach(key -> System.out.println(key + "->" + result.get(key)));
 5
Author: mdev, 2016-11-02 23:25:15

Java 8

map.entrySet().forEach(System.out::println);
 5
Author: bluehallu, 2017-04-24 13:52:21

Vous pouvez le faire plus facilement avec Gson:

Log.i(TAG, "SomeText: " + new Gson().toJson(yourMap));

Le résultat ressemblera à:

I/YOURTAG: SomeText: {"key1":"value1","key2":"value2"}
 3
Author: Anh Vu, 2017-05-08 08:50:16

Ce code est testé et fonctionne.

public void dumpMe(Map m) { dumpMe(m, ""); }
private void dumpMe(Map m, String padding) {
  Set s = m.keySet();
  java.util.Iterator ir = s.iterator();
  while (ir.hasNext()) {
    String key = (String) ir.next();
    Object value = m.get(key);
    if (value == null) continue;
    if (value instanceof Map) {
      System.out.println (padding + key + " = {");
      dumpMe((Map)value, padding + "  ");
      System.out.println(padding + "}");          
    }
    else if (value instanceof String  ||
             value instanceof Integer ||
             value instanceof Double  ||
             value instanceof Float   ||
             value instanceof Long ) {

      System.out.println(padding + key + " = " + value.toString());
    }
    else { 
      System.out.println(padding + key + " = UNKNOWN OBJECT: " + value.toString());
      // You could also throw an exception here
    }      
  } // while

} // dumpme

Charles.

 2
Author: ChopperCharles, 2012-06-14 21:16:22
String text="";

    for (Iterator i = keys.iterator(); i.hasNext() 
       {
           String key = (String) i.next();
           String value = (String) map.get(key);
           text+=key + " = " + value;
       }

        textview.setText(text);
 1
Author: jeet, 2012-01-18 12:10:28

Vous pouvez utiliser ce code:

for (Object variableName: mapName.keySet()){
    variableKey += variableName + "\n";
    variableValue += mapName.get(variableName) + "\n";
}
System.out.println(variableKey + variableValue);

Ce code s'assurera que toutes les clés sont stockées dans une variable puis imprimées!

 1
Author: kakaday22, 2014-05-11 04:55:05
public void dumpMe(Map m) { dumpMe(m, ""); }

private void dumpMe(Map m, String padding) 
{
    Set s = m.keySet();
    java.util.Iterator ir = s.iterator();
    while (ir.hasNext()) 
    {
        String key = (String) ir.next();
        AttributeValue value = (AttributeValue)m.get(key);
        if (value == null) 
            continue;
        if (value.getM() != null)
        {
            System.out.println (padding + key + " = {");
            dumpMe((Map)value, padding + "  ");
            System.out.println(padding + "}");          
        }
        else if (value.getS() != null  ||
                 value.getN() != null ) 
        {
            System.out.println(padding + key + " = " + value.toString());
        }
        else 
        { 
            System.out.println(padding + key + " = UNKNOWN OBJECT: " + value.toString());
            // You could also throw an exception here
        }      
    } // while
}

//This code worked for me.
 1
Author: Deepak Daniel, 2016-09-03 05:36:28
    for (String entry : map.keySet()) {
      String value = map.get(entry);
      System.out.print(entry + "" + value + " ");
      // do stuff
    }
 1
Author: Sundresh, 2018-05-18 04:35:29

Pour tous ceux qui ont cliqué dessus pour savoir quel est le contenu de votre HashMap, la méthode toString ( docs) fonctionne réellement avec la plupart des objets. (remarque: un tableau java n'est pas un objet!)

Donc ce woks parfaitement bien à des fins de débogage:

System.out.println(myMap.toString());

>>> {key1=value1, key2=value2}
 0
Author: virhonestum, 2018-03-07 04:41:18