带有LatLng的Google Maps hashmap

时间:2013-02-23 18:24:03

标签: android google-maps nullpointerexception hashmap

我创建了一个名为MapMarker的简单类,它如下:

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;
    }
}

当我在谷歌地图中添加标记时,我还按顺序创建一个HashMap,当点击一个信息窗口时,我可以用一些参数启动一个活动。我正在使用的代码是添加标记和初始化hashmap的以下内容

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!"));

当我尝试从hashmap获取值时,我得到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)

抱歉最后一次编辑已经完成。

1 个答案:

答案 0 :(得分:2)

确保密钥存在于HashMap中。

我的代码中遇到了类似的问题,我发现用于存储和查找的lat / lng值因其小数位数而不同,导致查找失败。

LatLng实现了equals(Object o)方法,因此您不必担心参考平等问题。