1

MapMarkerという単純なクラスを1つ作成しました。これは、次のとおりです。

public class MapMarker {
    private long id;
    private String resName;


    public MapMarker(){}

    public MapMarker(long id, String resName){
        this.id = id;
        this.resName = resName;
    }

    public long getId(){
        return id;
    }

    public String getResName(){
        return resName;
    }
}

グーグルマップにマーカーを追加している間、情報ウィンドウがクリックされたときにいくつかのパラメーターを使用してアクティビティを開始できるように、ハッシュマップも作成します。私が使用しているコードは、マーカーを追加してハッシュマップを初期化するために次のとおりです

private HashMap<LatLng, MapMarker> mapMarkersData = new HashMap<LatLng, MapMarker>();

markerCoords = new LatLng(lat, lng);

mapMarkersData.put(markerCoords, new MapMarker(markerId, markerRes));

map.addMarker(new MarkerOptions().position(markerCoords).title(title).snippet("Click to see more info!"));

ハッシュマップから値を取得しようとすると、nullpointerexceptionが発生します。私が使用しているコードは次のとおりです。

line 360:    markerId = mapMarkersData.get(marker.getPosition()).getId();
             markerResName = mapMarkersData.get(marker.getPosition()).getResName();

何が問題になっていますか?

編集:
logcatは次のとおりです:

02-23 20:37:55.780: E/AndroidRuntime(4853): FATAL EXCEPTION: main
02-23 20:37:55.780: E/AndroidRuntime(4853): java.lang.NullPointerException
02-23 20:37:55.780: E/AndroidRuntime(4853):     at   .MapActivity.onInfoWindowClick   (MapActivity.java:360)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at .GoogleMap$8.h(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at com.google.android.gms.internal.u$a.onTransact(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at android.os.Binder.transact(Binder.java:279)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at com.google.android.gms.maps.internal.IOnInfoWindowClickListener$Stub$Proxy.onInfoWindowClick(IOnInfoWindowClickListener.java:82)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.y.bw.a(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.a.y.f(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.a.y.a(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.a.bd.c(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.a.dq.onSingleTapConfirmed(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.e.v.onSingleTapConfirmed(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at maps.e.j.handleMessage(Unknown Source)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at android.os.Looper.loop(Looper.java:130)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at android.app.ActivityThread.main(ActivityThread.java:3691)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at java.lang.reflect.Method.invokeNative(Native Method)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at java.lang.reflect.Method.invoke(Method.java:507)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
02-23 20:37:55.780: E/AndroidRuntime(4853):     at dalvik.system.NativeStart.main(Native Method)

申し訳ありませんが、最後の編集が行われました。

4

1 に答える 1

2

キーがHashMapに存在することを確認してください。

コードで同様の問題が発生しましたが、保存とルックアップに使用したlat / lng値が小数桁数によって異なり、ルックアップが失敗することがわかりました。

LatLngはequals(Object o)メソッドを実装しているため、参照の同等性の問題について心配する必要はありません。

于 2013-04-03T08:09:47.353 に答える