Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用LatLng的谷歌地图hashmap_Android_Google Maps_Nullpointerexception_Hashmap - Fatal编程技术网

Android 用LatLng的谷歌地图hashmap

Android 用LatLng的谷歌地图hashmap,android,google-maps,nullpointerexception,hashmap,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

我创建了一个名为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;
    }
}
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)
在google地图中添加标记的同时,我还创建了一个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!"));
出什么事了

编辑:
日志目录如下:

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

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

请确保您的HashMap中存在密钥

我只是在代码中遇到了类似的问题,我发现用于存储和查找的lat/lng值与它们的小数位数不同,这导致查找失败


LatLng实现了equals(Object o)方法,因此您不必担心引用相等问题。

请发布日志,并告诉我们NullPointer出现的确切位置。您是对的。我刚刚编辑了我的问题。我猜出于某种原因,带有LatLng键的hashmap不会返回任何内容。嗯。。。只要看一下堆栈跟踪,我会说当你试图点击一个标记,地图试图为它创建一个弹出窗口时,它正在运行为空。是这样的吗?还是在你点击任何东西之前得到了NPE?我觉得发布的代码很好。很难说。我建议在失败的代码之前添加一个断点。在调试模式下启动,逐步遍历代码并检查空值,而它不应该…在那里我说第360行在onInfoWindowClick(标记)中,因此如果我删除这两行,我不会得到任何错误。我不确定,但是在那里我为所有标记添加了键LatLng到hashmap,这些标记应该是唯一的并且不可更改的,当我尝试获取值时,我得到了一个nullpointer异常。这就是我想它会发生的。我支持这个-
LatLng
你从一个标记中得到的不一定和你放进去的一样。如果要使用
LatLng
s作为地图键,应在将标记添加到应用程序后立即调用
marker.getPosition()
,并将结果用作键。