hashmap并从中检索数据
我必须对我的listview的更多项目做一个动作,所以我创建一个HashMap与所选应用程序的名称(在我的列表中)和相对位置。hashmap并从中检索数据
public void createHashMap(String name, int mPosition) {
// TODO Auto-generated method stub
mHashMap = new HashMap<String, Integer>();
mHashMap.put(name, mPosition);
Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show();
}
我在活动课的onItemClick
adapter.createHashMap(itemName, mPosition);
所以,当我在一排点击-i显示了正确的信息敬酒现在,我需要找回数据到HashMap和我写的这
public void retrieveHashMap() {
Iterator myVeryOwnIterator = mHashMap.keySet().iterator();
while(myVeryOwnIterator.hasNext()) {
String key=(String)myVeryOwnIterator.next();
int value= mHashMap.get(key);
Toast.makeText(context, "Key: "+key+" Value: "+value, Toast.LENGTH_LONG).show();
}
}
这项工作,但是当我调用retrieveHashMap方法我只显示最后一个插入值。我如何显示所有插入的值?
看起来像你的问题,现有的mHashMap
是你初始化每一次新的哈希映射。这就是为什么你只有最后一个值。试试这个:
public void createHashMap(String name, int mPosition) {
// init it only one time.
if(mHashMap == null){
mHashMap = new HashMap<String, Integer>();
}
mHashMap.put(name, mPosition);
Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show();
}
而且土司有一个持续时间,所以你不应该叫了很多次。如果你尝试写日志,你应该使用logcat。
更新:另一个原因,也许你的数据有重复的名称值。尝试调试或写入logcat,看看你是否有插入许多name
数据具有相同的值。因为哈希映射不被接受为重复键。 例如:
mHashMap.put("test", 2);
mHashMap.put("test", 3); // it will replace the item ["test" - 2] by ["test" - 3]. That's why you got only the last one.
,并确保您的迭代器应该是这样的:
Iterator<String> myVeryOwnIterator = mHashMap.keySet().iterator();
while(myVeryOwnIterator.hasNext()) {
String key=(String)myVeryOwnIterator.next();
int value= mHashMap.get(key);
System.out.println(key + " " + value);
}
希望这有助于!
问题依然存在..显示总是最后一个插入值:-( – user3103764
为什么你需要显示多少次烤面包?它有延迟时间正在被覆盖,使用Logcat写入日志,并看到它可以打印出所有的结果,或者你应该在textview中写入结果 – R4j
将Toast.makeText
移到while循环之外,并使用迭代的键在循环内创建想要的消息。
你还需要检查你是否覆盖createHashMap()
我搬出了循环,但错误仍然存在...我想检索所有插入的值 – user3103764
当您使用此方法
public void createHashMap(String name, int mPosition) {
// TODO Auto-generated method stub
mHashMap = new HashMap<String, Integer>();
mHashMap.put(name, mPosition);
Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show();
}
你要保存的HashMap或吐司实例。 当呼叫
mHashMap = new HashMap<String, Integer>();
和实例调用
Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show();
刷新(重新创建)的所有数据。
如何刷新数据和实例 – user3103764
@ user3103764看起来像你是一个业余的Java程序员,你必须知道java中的活动范围变量,当你调用方法和实例在方法中创建时,如果没有从方法返回实例,实例被杀死,你不能访问实例 – Jeus
因为他告诉我他在尝试我的方式时遇到了同样的问题(每次都停止创建新实例),所以我认为问题是他的关键数据可以重复,并且哈希映射不会不允许重复密钥。 – R4j
看起来您每次调用createHashMap方法时都重置mHashMap: mHashMap = new HashMap();
相反,只有在声明mHashMap(作为类成员)的情况下,应该只有这个地方,然后在createHashMap中只有“mHashMap.put(name,mPosition)”部分。
我试过了,但问题仍然存在......我认为问题在于,因为我有设备上所有已安装应用程序的列表,当我点击其中三个例子时,所有三个都必须放入hashmap动态。我怎么办?例如与一个for循环,但如何? – user3103764
我想,你的敬酒正在被覆盖,因为这是在循环中完成的。考虑在循环之外移动。 –
@ user3103764我已经更新了我的答案。你可以检查它并告诉我它是否无法工作(也许你应该为我提供你插入的数据)。 – R4j