0

当面の問題は、から値を取得しようとするとhashmapnullが返されることです。

私はhashMapインスタンスを持っています:

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

ここで、 tag は に関する簡単な情報を保持するクラスでmarkerあり、markerは Google マップmarkerです。

これがすべて発生するアクティビティの開始時に 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

そしてmapController。マップに追加された をAddMarker返します。marker

が満たされると、後で参照できるように にhashMap渡されます。onMarkerClickListener

クリックした場所hashMap.get(marker);から呼び出し ます。marker listenermarkermarker

常にnullを返すhashMap、onMarkerClickリスナー内が別のインスタンスだったからかなと思ったのですが、オリジナルへのポインタを作ってみたのですがうまくいかず、そこのタイトルを比較しようhashMap.get(marker.getTitle());marker.getID()思って試してみましたがそれは同じ結果で終わった。

リクエストがあればさらに情報を追加しますが、今のところ、クリックされたマーカーに基づいて hashMap から値を取得する他の方法はありますか?

4

1 に答える 1

1

hashMap.put(marker,key);この hashMapのコードでは、 key -> custom object(mapper) を使用しました。

したがって、キーで呼び出すと null が返されます。provide key (mapper)オブジェクトが一致する場所with put (mapper) key.

これを解決するには、Mapper クラスのequals メソッドと hashcode メソッドをオーバーライドする必要があります。

編集:

HashMapあなたのkeyです。mapper object(custom object)カスタム オブジェクト (Mapper オブジェクト) は HashMap のキーであるため、正確な値を取得するには、 overrideequals とhashcodeinが必要です。Mapper class

If key as Primitives(int) or String Object, no need to do the above thing.
于 2013-04-08T12:00:51.310 に答える