2012-01-18 41 views
59

Tôi rất mới phát triển Android và tôi đang cố gắng sử dụng HashMap trong dự án mẫu Android. Bây giờ, đang làm dự án mẫu cho học android. Tôi chỉ lưu trữ các khóa và giá trị trong HashMap, tôi muốn hiển thị các khóa và giá trị của chúng trong EditView. Tôi theo sau mã trong dự án mẫu của tôi. Tuy nhiên, khóa và giá trị đầu tiên chỉ in trong EditView.Làm thế nào để in tất cả các khóa và giá trị từ HashMap trong 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); 
    } 

Trong chế độ xem Edit iOS = 100 chỉ in. Tôi muốn in tất cả các phím và giá trị của chúng trong EditText. Bất cứ ai có thể vui lòng cho tôi biết nơi tôi đang làm sai? Cảm ơn trước.

+0

Xem câu hỏi này và nhiều người khác: http://stackoverflow.com/questions/1066589/ java-iterate-through-hashmap – Anton

+0

Xin chào Gopinath !!Mã của bạn để tìm nạp và đặt giá trị khóa bản đồ Hash là chính xác nhưng bạn chỉ đặt giá trị này cho một textView. –

+1

Xin cảm ơn tất cả. Tôi có câu trả lời. Một lần nữa tôi cảm ơn tất cả các bạn. – Gopinath

Trả lời

7

Trước tiên, có lỗi trong mã của bạn, ví dụ: bạn đang thiếu dấu chấm phẩy và dấu ngoặc đơn đóng trong vòng lặp for.

Sau đó, nếu bạn đang cố thêm các giá trị vào dạng xem, bạn nên sử dụng textview.appendText(), thay vì .setText().

Có một câu hỏi tương tự ở đây: how to change text in Android TextView

+2

Đây là câu trả lời hay nhất, nhưng hãy xem @Shadow để biết cách sử dụng Java 5 cho và Map.Entry đúng cách. –

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

Nhân viên tuyệt vời, bạn hãy cứu tôi :) – 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

Đó là vì TextView của bạn nhận được văn bản mới trên mỗi lần lặp và giá trị so previuos vứt bỏ. Ghép chuỗi bằng StringBuilder và đặt giá trị TextView sau vòng lặp. Ngoài ra, bạn có thể sử dụng loại vòng lặp này:

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

Mã này được kiểm tra và hoạt động.

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

Cảm ơn bạn, đã thêm điều này vào utils của tôi – moberme

1

bạn có thể sử dụng mã này:

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

mã này sẽ đảm bảo rằng tất cả các phím được lưu trữ trong một biến và sau đó in!

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

Vui lòng xem [answer] – JimHawkins

3

Với Java 8:

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

Bạn có thể vui lòng chỉnh sửa lý do tại sao mã này trả lời câu hỏi không? Các câu trả lời chỉ có mã được [nản chí] (http://meta.stackexchange.com/q/148272/274165), bởi vì chúng không dạy giải pháp. –

+0

OP muốn in tất cả các khóa và cặp giá trị. Tôi không nghĩ rằng bất kỳ lời giải thích là cần thiết ở đây. Nó là một chủ đề rất cũ, đã được trả lời, và cũng không có điều não. Tôi đã viết nếu ai đó đang tìm kiếm một giải pháp trong Java8, anh ta/cô ấy có thể làm một cái gì đó như thế. – mdev

4

Java 8

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

Bạn có thể làm điều đó dễ dàng hơn với Gson:

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

Kết quả sẽ trông giống như :

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

Đối với tất cả mọi người nhấp vào đây để tìm hiểu những gì mà nội dung của HashMap của bạn là, toString phương pháp (docs) thực sự hoạt động với hầu hết các đối tượng. (Lưu ý: một mảng java không phải là một đối tượng!)

Vì vậy woks này hoàn toàn tốt đẹp cho mục đích gỡ lỗi:

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

>>> {key1=value1, key2=value2} 
Các vấn đề liên quan