2013-04-08 50 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