Android 用LatLng的谷歌地图hashmap
我创建了一个名为MapMarker的简单类,它如下所示: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
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,以便在单击信息窗口时可以使用一些参数启动活动。我使用的代码如下,用于添加标记并初始化hashmapprivate 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()
,并将结果用作键。