2012-01-18 13 views
59

Soy muy nuevo para el desarrollo de Android, y estoy tratando de usar HashMap en el proyecto de ejemplo de Android. Ahora, estoy haciendo un proyecto de muestra para aprender Android. Solo almaceno claves y valores en HashMap, quiero mostrar las claves y sus valores en EditView. Seguí el código siguiente en mi proyecto de muestra. Pero, la primera clave y el valor solo imprimen en EditView.¿Cómo imprimir todas las claves y valores de HashMap en Android?

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); 
    } 

En EditView iOS = 100 solo está imprimiendo. Quiero imprimir todas las claves y su valor en EditText. ¿Alguien puede decirme por favor dónde estoy haciendo mal? Gracias por adelantado.

+0

Ver esta pregunta y muchas otras: http://stackoverflow.com/questions/1066589/ java-iterate-through-hashmap – Anton

+0

hola Gopinath !!Su código para recuperar y establecer el valor de la clave del mapa Hash es correcto, pero está estableciendo estos valores en solo un textView. –

+1

Gracias a todos. Tengo la respuesta. Una vez más, les agradezco a todos. – Gopinath

Respuesta

7

Primero, hay errores en su código, es decir. te falta un punto y coma y un paréntesis de cierre en el ciclo for.

Luego, si está intentando agregar valores a la vista, debería usar textview.appendText(), en lugar de .setText().

Hay una pregunta similar aquí: how to change text in Android TextView

+2

Esta es la mejor respuesta, pero vea también @Shadow para saber cómo usar Java 5 for y Map.Entry correctamente. –

164
for (Map.Entry<String,String> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    // do stuff 
} 
+2

Gran hombre de trabajo, me salvas :) – delive

1
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); 
12

Se debe a que su TextView recibiera un nuevo texto sobre cada iteración y el valor previuos tirado. Concatenar cadenas por StringBuilder y establecer el valor de TextView después del ciclo. También se puede utilizar este tipo de bucle:

for (Map.Entry<String, String> e : map.entrySet()) { 
    //to get key 
    e.getKey(); 
    //and to get value 
    e.getValue(); 
} 
2

Este código es probado y en funcionamiento.

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.

+0

Gracias, agregué esto a mis utilidades – moberme

1

puede utilizar este código:

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

este código se asegurará de que todas las claves se almacenan en una variable y luego se imprimen!

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)); 
} 
1
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. 
+0

Mire [respuesta] – JimHawkins

3

Con Java 8:

map.keySet().forEach(key -> System.out.println(key + "->" + result.get(key))); 
+0

¿Podría por favor [editar] en una explicación de por qué este código responde la pregunta? Las respuestas de solo código están [desaconsejadas] (http://meta.stackexchange.com/q/148272/274165), porque no enseñan la solución. –

+0

OP quiere imprimir todas las claves y pares de valores. No creo que se necesite ninguna explicación aquí. Es un hilo muy antiguo, ya respondido, y tampoco algo del cerebro. Ya he escrito si alguien está buscando una solución en Java8, él/ella puede hacer algo así. – mdev

4

Java 8

map.entrySet().forEach(System.out::println); 
2

Usted puede hacer que sea más fácil con Gson:

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

El resultado se parecerá :

I/YOURTAG: SomeText: {"key1":"value1","key2":"value2"} 
0

Para todos los que ha hecho clic en este para averiguar lo que el contenido de su HashMap es, el método de toString (docs) realmente funciona con la mayoría de los objetos. (Nota: una matriz de Java no es un objeto!)

por lo que este woks perfectamente bien para fines de depuración:

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

>>> {key1=value1, key2=value2} 
Cuestiones relacionadas