2013-04-08 89 views
0

比较当前的问题是,当我试图从hashmap拉的值它返回null。使用哈希映射没有给出预期的结果

我有一个hashMap实例:

Map<Marker,Tag> theHashMap = new HashMap<Marker,Tag>();

其中标签是保存有关和一些简单的信息,一类是谷歌地图。

我添加到theHashMap在这一切发生在

theHashMap.put(mapController.AddMarker(new Tag(1, "City Of Dundee", DUNDEE_LOCATION, "untagged",), new Tag(1, "City Of Dundee", DUNDEE_LOCATION, "untagged",)); 

其中mapController是一类与相关的一切googleMap交易活动的开始。

mapControllerAddMarker返回已添加到地图的。

hashMap填满后,传递给onMarkerClickListener供以后参考。

我打电话 hashMap.get(marker);marker listener内,其中是被点击的。

它总是返回null,我想这可能是因为onMarkerClick监听器里的hashMap是一个单独的实例,但我试图使一个指向原始的和没有工作,我也尝试hashMap.get(marker.getTitle());并与marker.getID()思维它会比较那些标题,但它以相同的结果结束。

如果需要,我会添加更多的信息,但现在,有没有其他方式从基于点击标记的hashMap中获取值?

回答

1

在你的代码hashMap.put(marker,key);这里在这个哈希映射中,你已经使用了键 - >自定义对象(mapper)。

因此,当您通过密钥调用时它返回null。其中provide key (mapper)对象应符合with put (mapper) key.

你必须覆盖equals和hashCode方法在映射类来解决这个问题。

编辑:

HashMapkeymapper object(custom object)。由于自定义对象(Mapper对象)是HashMap中的关键字,我们必须override等于和hashcodeMapper class中获取确切的值。

If key as Primitives(int) or String Object, no need to do the above thing. 
+0

对不起,我努力理解你的意思,在'theHashMap.put(标记键,变量值)'关键是一个自定义对象,这是否意味着它需要int,字符串等代替一个自定义对象? – 2013-04-08 12:12:05