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中看到了“error 1”消息,但之后我接受了一个空指针异常,我不知道为什么,我相信我用“if”块检查了mylocoverlay是否为空。有什么建议吗?
编辑:
这是我的assignedgfirstloc方法,它分配了first值:
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
只能用于显示来自传感器的位置。
你不能设置它。
您得到了一个空指针,因为MyLocationOverlay.getMyLocation()
返回空值。传感器还没有时间捕捉地理位置。
如果要显示传感器获取数据时的位置,可以执行以下操作:
mMyLocationOverlay.runOnFirstFix(new Runnable() { public void run() {
mapView.getController().animateTo(mMyLocationOverlay.getMyLocation());
}});
如果您想在任意位置(带有纬度和经度值)显示项目,则需要实现自己版本的
ItemizedOverlay
您可以在sdk文档中找到一个示例:Google Map View tutorial,part2 addingoverlayitem
如果只想在地图上显示任意位置,则不需要覆盖。只要调用函数,它就会工作:
private void initMyLocation() {
assignFirstLoc();
}