2012-01-18 15 views
59

Jestem bardzo nowy w rozwoju Androida i próbuję użyć HashMap w przykładowym projekcie Androida. Teraz robię przykładowy projekt do nauki androida. Po prostu przechowuję klucze i wartości w HashMap, chcę pokazać klucze i ich wartości w EditView. Śledziłem poniższy kod w moim przykładowym projekcie. Ale najpierw wydrukuj klucz i wartość tylko w EditView.Jak wydrukować wszystkie klucze i wartości z HashMap w systemie 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); 
    } 

W EditView iOS = 100 jest tylko drukowanie. Chcę wydrukować wszystkie klucze i ich wartość w EditText. Czy ktoś może mi powiedzieć, co robię źle? Z góry dziękuję.

+0

Zobacz to pytanie i wiele innych: http://stackoverflow.com/questions/1066589/ java-iterate-through-hashmap – Anton

+0

hello Gopinath !!Twój kod do pobrania i ustawienia wartości klawisza skrótu Hash jest poprawny, ale ustawiasz tę wartość tylko na jeden tekstView. –

+1

Dziękuję wszystkim. Mam odpowiedź. Jeszcze raz dziękuję wszystkim. – Gopinath

Odpowiedz

7

Po pierwsze, występują błędy w kodzie, tj. brakuje średnika i nawiasu zamykającego w pętli for.

Następnie, jeśli próbujesz dołączyć wartości do widoku, należy użyć textview.appendText(), zamiast .setText().

Jest podobne pytanie tutaj: how to change text in Android TextView

+2

To jest najlepsza odpowiedź, ale zobacz też @Shadow, jak poprawnie używać Java 5 for i Map.Entry. –

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

Świetna robota, oszczędzasz mnie :) – 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

To dlatego, że TextView otrzymywać nowy tekst na każdej iteracji i wartości previuos wyrzucać. Połącz łańcuchy za pomocą StringBuilder i ustaw wartość TextView po pętli. Możesz również użyć tego typu pętli:

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

Ten kod jest przetestowany i działa.

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

Dziękuję, dodaj to do moich utils – moberme

1

można użyć tego kodu:

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

ten kod będzie upewnić się, że wszystkie klucze są przechowywane w zmiennej, a następnie drukowane!

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

Proszę spojrzeć na [odpowiedź] – JimHawkins

3

Z Java 8:

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

Czy mógłbyś proszę [edytuj] wyjaśnienie, dlaczego ten kod odpowiada na pytanie? Odpowiedzi tylko na kod są zniechęcane (http://meta.stackexchange.com/q/148272/274165), ponieważ nie uczą rozwiązania. –

+0

OP chce wydrukować wszystkie klucze i pary wartości. Nie potrzebuję tutaj żadnego wyjaśnienia. Jest to bardzo stara nitka, już odebrana, a także nie ma mowy o mózgu. Pisałem już, jeśli ktoś szuka rozwiązania w Javie8, może zrobić coś takiego. – mdev

4

Java 8

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

Można zrobić to łatwiejsze Gson:

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

Rezultatem będzie wyglądać :

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

Dla każdego, kto kliknął na to, aby dowiedzieć się, co treść swojej HashMap jest metoda toString (docs) faktycznie działa z większością przedmiotów. (Uwaga: tablica java nie jest obiekt!)

więc to woks perfekcyjnie do celów debugowania:

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

>>> {key1=value1, key2=value2} 
Powiązane problemy