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方法我只显示最后一个插入值。我如何显示所有插入的值?

+0

我想,你的敬酒正在被覆盖,因为这是在循环中完成的。考虑在循环之外移动。 –

+0

@ user3103764我已经更新了我的答案。你可以检查它并告诉我它是否无法工作(也许你应该为我提供你插入的数据)。 – R4j

看起来像你的问题,现有的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); 
    } 

希望这有助于!

+0

问题依然存在..显示总是最后一个插入值:-( – user3103764

+0

为什么你需要显示多少次烤面包?它有延迟时间正在被覆盖,使用Logcat写入日志,并看到它可以打印出所有的结果,或者你应该在textview中写入结果 – R4j

Toast.makeText移到while循环之外,并使用迭代的键在循环内创建想要的消息。

你还需要检查你是否覆盖createHashMap()

+0

我搬出了循环,但错误仍然存​​在...我想检索所有插入的值 – 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(); 

刷新(重新创建)的所有数据。

+0

如何刷新数据和实例 – user3103764

+0

@ user3103764看起来像你是一个业余的Java程序员,你必须知道java中的活动范围变量,当你调用方法和实例在方法中创建时,如果没有从方法返回实例,实例被杀死,你不能访问实例 – Jeus

+0

因为他告诉我他在尝试我的方式时遇到了同样的问题(每次都停止创建新实例),所以我认为问题是他的关键数据可以重复,并且哈希映射不会不允许重复密钥。 – R4j

看起来您每次调用createHashMap方法时都重置mHashMap: mHashMap = new HashMap();

相反,只有在声明mHashMap(作为类成员)的情况下,应该只有这个地方,然后在createHashMap中只有“mHashMap.put(name,mPosition)”部分。

+0

我试过了,但问题仍然存在......我认为问题在于,因为我有设备上所有已安装应用程序的列表,当我点击其中三个例子时,所有三个都必须放入hashmap动态。我怎么办?例如与一个for循环,但如何? – user3103764