2012-01-18 122 views
59

我对Android开发非常新,我试图在Android示例项目中使用HashMap。现在,我正在做学习android的示例项目。我只是将键和值存储在HashMap中,我想在EditView中显示键和它们的值。我在我的示例项目中遵循以下代码。但是,第一个键和值只能在EditView中打印。如何在Android中打印HashMap中的所有键和值?

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

在EditView中iOS = 100只是打印。我想要在EditText中打印所有的键和它们的值。任何人都可以告诉我我在哪里做错了?提前致谢。

+0

看到这个问题和其他许多人:http://stackoverflow.com/questions/1066589/ java-iterate-through-hashmap – Anton 2012-01-18 12:09:12

+0

你好Gopinath !!您获取并设置哈希映射键值的代码是正确的,但是您只将这些值设置为一个textView。 – 2012-01-18 12:10:32

+1

谢谢大家。我得到了答案。我再一次感谢你们。 – Gopinath 2012-01-18 12:22:35

回答

7

首先,你的代码有错误,即。您在for循环中缺少分号和右括号。

然后,如果您尝试将值附加到视图,则应该使用textview.appendText()而不是.setText()。

有一个类似的问题在这里:how to change text in Android TextView

+2

这是最好的答案,但也请参阅@Shadow以了解如何正确使用Java 5 for和Map.Entry。 – 2012-01-18 12:12:41

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

伟大的工作的人,你救了我:) – delive 2015-06-03 16:36:56

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

这是因为你的TextView收到的每一个迭代和previuos价值扔掉的新文本。通过StringBuilder连接字符串并在循环后设置TextView值。 您也可以使用这种类型的循环:

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

该代码进行测试和工作。

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

谢谢,添加到我的工具 – moberme 2014-04-11 23:20:06

1

您可以使用此代码:

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

此代码将确保所有的密钥存储在一个变量,然后打印!

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

请看看[回答] – JimHawkins 2016-09-03 05:34:19

3

与Java 8:

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

你可以请[编辑]在解释为什么这段代码回答这个问题?仅限代码答案[阻止](http://meta.stackexchange.com/q/148272/274165),因为他们没有教导解决方案。 – 2016-11-02 23:25:33

+0

OP想要打印所有的键和值对。我不认为这里需要任何解释。这是一条非常古老的线索,已经回答了,也没有脑子的东西。我已经写过,如果有人在Java8中寻找解决方案,他/她可以这样做。 – mdev 2016-11-04 01:37:28

4

的Java 8

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

你可以做到这一点与GSON简单:

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

结果看起来像:

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

大家谁点击这个来找出你的HashMap的内容是什么,toString方法(docs)实际上大多数对象的作品。 (注:Java数组是不是对象!)

所以这镬完美的罚款调试目的:

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

>>> {key1=value1, key2=value2} 
相关问题