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

je suis très nouveau pour le développement Android, et j'essaie d'utiliser HashMap dans Android sample project. Maintenant, je fais un exemple de projet pour apprendre l'androïde. Je stocke juste 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 touche et la valeur seulement l'impression 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. Peut quelqu'un peut-il me dire où je me trompe? Merci à l'avance.

62
demandé sur e-shfiyut 2012-01-18 16:05:41

13 réponses

D'abord, il y a des erreurs dans votre code, i.e. il manque un point-virgule et une parenthèse dans la boucle for.

Puis, 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
répondu 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
répondu Shadow 2012-01-18 12:10:09

c'est parce que votre TextView reçoit un nouveau texte sur chaque itération et chaque valeur previuos jetée. Concaténer les chaînes par StringBuilder et définir la valeur TextView après 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
répondu 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
répondu Abhi 2014-05-29 11:16:24

Avec Java 8:

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

Java 8

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

Vous pouvez le faire plus facile avec Gson:

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

le résultat ressemblera à:

I/YOURTAG: SomeText: {"key1":"value1","key2":"value2"}
3
répondu 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
répondu 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
répondu 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 veillera à ce que toutes les clés soient stockées dans une variable et ensuite imprimées!

1
répondu 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
répondu 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
répondu 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 avec la plupart des objets. (remarque: un tableau java n'est pas un objet!)

donc, ce woks parfaitement amende à des fins de débogage:

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

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