private void initMyLocation() {
myLocOverlay = new MyLocationOverlay(this, myMap);
myLocOverlay.enableCompass();
myLocOverlay.enableMyLocation();
myMap.getOverlays().add(myLocOverlay);
if (myLocOverlay == null)
{
assignFirstLoc();
}
if (myLocOverlay != null)
{
Log.e("error","1");
p = new GeoPoint((int) (myLocOverlay.getMyLocation().getLatitudeE6()), (int) (myLocOverlay.getMyLocation().getLongitudeE6()));
mc = myMap.getController();
mc.animateTo(p);
mc.setCenter(p);
}
我在 logcat 中看到“错误 1”消息,但在那之后我出现了一个空指针异常,我不知道为什么,我相信我用“if” block 检查 myLocOverlay 是否为空。有什么建议吗?
编辑:
这是我分配第一个值的 assignedGFirstLoc 方法:
private void assignFirstLoc()
{
final String coordinates[] = {"41.00527", "28.97696"};
double lat2 = Double.parseDouble(coordinates[0]);
double lng2 = Double.parseDouble(coordinates[1]);
p = new GeoPoint((int) (lat2 * 1E6), (int) (lng2 * 1E6));
myMap.getController().setZoom(16);
myMap.getController().animateTo(p);
myMap.getController().setCenter(p);
}
最佳答案
MyLocationOverlay
只能用于显示来自传感器的位置。
你不能设置它。
您得到一个 NullPointer,因为 MyLocationOverlay.getMyLocation()
返回 null。传感器还没有时间捕捉地理定位。
如果您想在传感器获得数据时显示位置,您可以这样做:
mMyLocationOverlay.runOnFirstFix(new Runnable() { public void run() {
mapView.getController().animateTo(mMyLocationOverlay.getMyLocation());
}});
如果你想在任意位置显示一个项目(带有纬度和经度值)你需要实现你自己的 ItemizedOverlay
版本
您可以在 SDK 文档中找到示例:Google Map View tutorial , Part2 添加OverlayItem
如果您只想显示 map 上的任意位置,则不需要叠加层。只需调用您的函数,它就会起作用:
private void initMyLocation() {
assignFirstLoc();
}
关于android - MyLocationOverlay 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323918/