You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Google Maps:如何判断Polyline是否为空

解决Google Maps Polyline初始化与Points设置的编译错误问题

看起来你在处理Google Maps的Polyline时遇到了两个核心问题:一是如何检查polyline变量是否已通过PolylineOptions完成初始化,二是尝试设置points为null时触发的编译错误。我来帮你一步步搞定这些问题:

1. 先正确声明全局Polyline变量

首先,把polyline声明为Activity的全局成员变量,初始值设为null——这样后续就能通过判断它是否为null,来确认是否已经用PolylineOptions初始化过:

private Polyline mPolyline; // 全局成员,初始为null
private GoogleMap mMap;

2. 为什么设置points为null会报错?

Polyline.setPoints()方法要求传入的参数是List<LatLng>类型,不能直接传null,这就是你遇到编译错误的直接原因。如果想清空折线的所有点,应该调用mPolyline.getPoints().clear(),而不是试图把points设为null。

3. 检查Polyline是否已初始化的正确姿势

在操作polyline之前,先判断它是否不为null(也就是是否已经通过mMap.addPolyline(PolylineOptions)创建成功):

// 在需要操作polyline的地方执行检查
if (mPolyline != null) {
    // 说明polyline已经用PolylineOptions初始化过了
    // 这里可以做清空点、更新点等操作
    mPolyline.getPoints().clear();
} else {
    // 如果还没初始化,就用PolylineOptions创建新的折线
    PolylineOptions options = new PolylineOptions()
            .addAll(coordList) // 传入你的LatLng集合
            .width(5) // 折线宽度
            .color(Color.RED); // 折线颜色
    mPolyline = mMap.addPolyline(options);
}

4. onMapReady中的合理处理

因为onMapReady会在Activity加载时自动调用,你可以在这里初始化mMap,同时根据是否有初始数据来决定是否创建Polyline:

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    
    // 如果一开始就有coordList数据,可以直接初始化polyline
    if (coordList != null && !coordList.isEmpty()) {
        PolylineOptions options = new PolylineOptions()
                .addAll(coordList)
                .width(5)
                .color(Color.RED);
        mPolyline = mMap.addPolyline(options);
    } else {
        // 暂时不创建polyline,等后续拿到receivedDataArray再处理
        mPolyline = null;
    }
}

5. 解析receivedDataArray并更新Polyline的示例

当你拿到receivedDataArray后,先解析成LatLng集合,再更新Polyline:

// 解析receivedDataArray为LatLng集合(假设数组是[lat1, lng1, lat2, lng2...]格式)
ArrayList<LatLng> coordList = new ArrayList<>();
for (int i = 0; i < receivedDataArray.length; i += 2) {
    double latitude = receivedDataArray[i];
    double longitude = receivedDataArray[i+1];
    coordList.add(new LatLng(latitude, longitude));
}

// 更新Polyline
if (mPolyline != null) {
    // 已有Polyline,直接更新点集合
    mPolyline.setPoints(coordList);
} else {
    // 还没有Polyline,用PolylineOptions创建
    PolylineOptions options = new PolylineOptions()
            .addAll(coordList)
            .width(5)
            .color(Color.RED);
    mPolyline = mMap.addPolyline(options);
}

关键提醒:

  • 永远不要给setPoints()传null,清空点用getPoints().clear()就好
  • 操作polyline前一定要先判断它是否不为null,避免空指针异常
  • Polyline对象只能通过GoogleMap.addPolyline(PolylineOptions)创建,不能直接new

内容的提问来源于stack exchange,提问作者asus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:00:42