如何在Android中打印HashMap中的所有键和值?
我很新的Android开发,我试图在Android示例项目中使用HashMap。 现在,我正在做学习android的示例项目。 我只是在HashMap中存储键和值,我想在EditView中显示键和它们的值。 我遵循我的示例项目中的代码。 但是,第一个键和值只能在EditView中打印。
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中打印所有的键和它们的值。 任何人都可以告诉我,我在做什么错? 提前致谢。
首先,你的代码有错误,即。 您在for循环中缺less分号和右括号。
然后,如果您尝试将值附加到视图,则应该使用textview.appendText()而不是.setText()。
这里还有一个类似的问题: 如何在Android TextView中更改文本
for (Map.Entry<String,String> entry : map.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); // do stuff }
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)); }
这是因为你的TextView在每次迭代中都会接收到新的文本,并抛弃掉前面的值。 通过StringBuilder连接string并在循环之后设置TextView值。 你也可以使用这种types的循环:
for (Map.Entry<String, String> e : map.entrySet()) { //to get key e.getKey(); //and to get value e.getValue(); }
Java 8
map.entrySet().forEach(System.out::println);
此代码已经过testing和工作。
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
查尔斯。
使用Java 8:
map.keySet().forEach(key -> System.out.println(key + "->" + result.get(key)));
Gson可以更简单地做到这一点:
Log.i(TAG, "SomeText: " + new Gson().toJson(yourMap));
结果将如下所示:
I/YOURTAG: SomeText: {"key1":"value1","key2":"value2"}
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);
你可以使用这个代码:
for (Object variableName: mapName.keySet()){ variableKey += variableName + "\n"; variableValue += mapName.get(variableName) + "\n"; } System.out.println(variableKey + variableValue);
这个代码将确保所有的键都存储在一个variables,然后打印!
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.