繁体   English   中英

哈希图并从中检索数据

[英]hashmap and retrieve data from it

我必须对列表视图的更多项进行操作,因此我创建了一个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);

因此,当我单击一行时,现在我将向烤面包展示正确的信息,我需要将数据检索到哈希图中,并且我将其编写为

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

Toast.makeText while循环外,然后使用迭代的键在循环内创建所需的消息。

您还需要检查是否在createHashMap()覆盖了现有的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);
    }

希望有帮助!

使用此方法时

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

}

您必须保存哈希图或Toast实例。 通话时

 mHashMap = new HashMap<String, Integer>();

并打电话

Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show();

刷新(再次创建)实例中的所有数据。

似乎您每次调用createHashMap方法时都在重置mHashMap:mHashMap = new HashMap();

相反,仅在声明mHashMap(作为类成员)的地方才应具有此属性,然后在createHashMap中仅具有“ mHashMap.put(name,mPosition)”部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM