2012-01-18 4 views
59

Sono molto nuovo per lo sviluppo Android e sto cercando di utilizzare HashMap nel progetto di esempio Android. Ora sto facendo un progetto di esempio per imparare Android. Ho solo archiviato chiavi e valori in HashMap, voglio mostrare le chiavi e i loro valori in EditView. Ho seguito il codice qui sotto nel mio progetto di esempio. Ma, la prima chiave e valore stampano solo in EditView.Come stampare tutte le chiavi e i valori da HashMap in 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); 
    } 

In EditView iOS = 100 è solo in stampa. Voglio stampare tutti i tasti e il loro valore in EditText. Qualcuno può dirmi dove sto sbagliando? Grazie in anticipo.

+0

Vedere questa domanda e molti altri: http://stackoverflow.com/questions/1066589/ java-iterate-through-hashmap – Anton

+0

ciao Gopinath !!Il tuo codice per recuperare e impostare il valore della chiave della mappa hash è corretto, ma stai impostando questi valori su un solo testo. –

+1

Grazie a tutti. Ho la risposta Ancora una volta ti ringrazio tutti. – Gopinath

risposta

7

Innanzitutto, ci sono errori nel codice, es. ti manca un punto e virgola e una parentesi chiusa nel ciclo for.

Quindi, se si sta tentando di aggiungere valori alla vista, è necessario utilizzare textview.appendText(), anziché .setText().

C'è una domanda simile qui: how to change text in Android TextView

+2

Questa è la risposta migliore, ma vedi anche @Shadow su come utilizzare correttamente Java 5 e Map.Entry. –

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

Ottimo lavoro, mi hai salvato :) – 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

è perché il vostro TextView recieve nuovo testo su ogni iterazione e valore previuos gettato via. Concatena le stringhe con StringBuilder e imposta il valore TextView dopo il ciclo. Inoltre è possibile utilizzare questo tipo di ciclo:

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

Questo codice è testato e funzionante.

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

Grazie, ho aggiunto questo ai miei programmi di utilità – moberme

1

è possibile utilizzare questo codice:

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

questo codice farà in modo che tutte le chiavi sono memorizzate in una variabile e poi stampati!

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

Per favore guarda [risposta] – JimHawkins

3

con Java 8:

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

Potresti per favore [modificare] in una spiegazione del perché questo codice risponde alla domanda? Le risposte al solo codice sono [scoraggiate] (http://meta.stackexchange.com/q/148272/274165), perché non insegnano la soluzione. –

+0

OP desidera stampare tutte le chiavi e le coppie di valori. Non penso che sia necessaria alcuna spiegazione qui. È un filo molto vecchio, ha già risposto, e anche niente cervello. Ho già scritto se qualcuno sta cercando una soluzione in Java8, lui/lei può fare qualcosa del genere. – mdev

4

Java 8

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

si può fare più facile con GSON:

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

Il risultato sarà simile :

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

Per tutti coloro che hanno cliccato su questo per scoprire qual è il contenuto del tuo HashMap è, il metodo toString (docs) in realtà funziona con la maggior parte degli oggetti. (Nota: un array di Java non è un oggetto!)

quindi questo wok perfettamente bene per scopi di debug:

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

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