【问题标题】:MyLocationOverlay problemMyLocationOverlay 问题
【发布时间】:2011-03-16 10:24:13
【问题描述】:
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”块检查 myLocOverlay 是否为空。有什么建议吗?

编辑:

这是我分配第一个值的 assignmentGFirstLoc 方法:

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

    }

【问题讨论】:

  • 尝试检查 getMyLocation() 的值
  • 怎么样?我认为由于 gps 问题,笔记本电脑无法定位。
  • 带有toast消息,我在手机中取了“null”值。
  • 这没有意义。你为什么要对MyLocationOverlay 进行空检查?当您在实例化它时检查它时,它显然永远不会为空,因此它永远不会在那里为空。
  • 我真的不知道你是否想要我可以发送我的项目。我只想获取我的位置并尝试将我的屏幕居中。

标签: android


【解决方案1】:

MyLocationOverlay 只能用于显示来自传感器的位置。 你不能设置它。 你有一个 NullPointer 因为MyLocationOverlay.getMyLocation() 返回 null。传感器还没有时间捕捉到地理位置。

如果您想在传感器获取数据时显示位置,您可以这样做:

mMyLocationOverlay.runOnFirstFix(new Runnable() { public void run() {
        mapView.getController().animateTo(mMyLocationOverlay.getMyLocation());
}});

如果您想在任意位置显示项目(带有纬度和经度值),您需要实现自己的ItemizedOverlay 版本 您可以在 SDK 文档中找到一个示例:Google Map View tutorial, Part2AddingOverlayItem

如果您只想在地图上显示任意位置,则不需要叠加层。只需调用您的函数,它就会起作用:

private void initMyLocation() {
    assignFirstLoc();
}

【讨论】:

    【解决方案2】:

    您似乎没有将任何坐标传递给 GeoPoint。除非它在您的代码中的其他位置。像这样的工作

    String coordinates[] = {"41.146064", "-80.642861"};
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);
    
        p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
    

    【讨论】:

    • 是的,你的方法可行,但假设我在其他地方我不知道确切的坐标,所以我必须使用 location.getLatitude() 或 myLocOverlay.getMyLocation().getLatitudeE6() 方法但是这些方法会报错
    • 你必须有一些方法来确定你的地理位置,就像在安卓设备上使用 GPS 位置一样
    • 您的空指针是由于缺少地理点数据。 MyLocationOverlay 实现了 android.hardware.SensorListener 和 android.location.LocationListener。因此,您必须在某个地方从您的设备获取您的地理编码位置。我正在使用叠加层,但我的地理点数据来自数据库。但是,我确实知道 LocationListener 应该为您工作。阅读此stackoverflow.com/questions/1801866/…
    • 我添加了一个我的 assignFirstLoc 方法。如您所知,我为地理点分配了一个特殊的数据。然后 onCreate 方法再次编译我有一个地理点值,我认为 myLocOverlay 不为空,但我在我的 initMyLocation 方法中添加了一个 toast 消息,它返回“null”:S
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多