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
相关产品推荐
相关产品推荐

