web-dev-qa-db-fra.com

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

Je suis très nouveau pour le développement de Android et j'essaie d'utiliser HashMap dans l'exemple de projet Android. Maintenant, je fais un exemple de projet pour apprendre Android. Je viens de stocker 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, première clé et valeur uniquement 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 n'imprime que. Je veux imprimer toutes les clés et leur valeur dans EditText. Quelqu'un peut-il s'il vous plaît me dire où je me trompe? Merci d'avance.

66
Gopinath

Premièrement, 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

11
Savino Sguera
for (Map.Entry<String,String> entry : map.entrySet()) {
  String key = entry.getKey();
  String value = entry.getValue();
  // do stuff
}
183
Shadow

C'est parce que votre TextView reçoit un nouveau texte à chaque itération et chaque valeur précédente est rejetée. Concaténez des chaînes par StringBuilder et définissez la valeur TextView après la boucle. Aussi, vous pouvez 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
muffinmad
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
Abhi

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"}
7
Anh Vu

Java 8

map.entrySet().forEach(System.out::println);
5
bluehallu

Avec Java 8:

map.keySet().forEach(key -> System.out.println(key + "->" + result.get(key)));
5
mdev
    for (String entry : map.keySet()) {
      String value = map.get(entry);
      System.out.print(entry + "" + value + " ");
      // do stuff
    }
2
Sundresh

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
ChopperCharles
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
jeet
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
Deepak Daniel

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 fera en sorte que toutes les clés soient stockées dans une variable puis imprimées!

1
kakaday22

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. (note: un tableau Java n'est pas un objet!)

Donc, cela fonctionne parfaitement pour le débogage:

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

>>> {key1=value1, key2=value2}
0
virhonestum