Android Google 地图 - 如何检查折线是否为空

Android Google Maps - how to check if Polyline is null

我正在尝试检查我的 polyline 变量是否包含任何分配的 polylineoptions

加载 activity 时,会自动调用 onMapReady 方法,因此当我尝试将折线的点设置为空时出现编译器错误(请参见下面的代码)

向折线分配数据看起来像这样:

    mMap = googleMap;
    double[] firstCoords;
    double[] lastCoords;
    double[] receivedDataArray;
    double latitude;
    double longitude;

    ArrayList<LatLng> coordList = new ArrayList<LatLng>();
    coordList.clear();


    polyline.setPoints(null); //ERROR HERE


    for (int i = 0; i < coordinatesArray.size() - 1; i++) {
        receivedDataArray = coordinatesArray.get(i);

        latitude = receivedDataArray[0];
        longitude = receivedDataArray[1];

        coordList.add(new LatLng(latitude,longitude));
    }

    options = new PolylineOptions().addAll(coordList).width(10).color(Color.BLUE).geodesic(true);
    polyline = mMap.addPolyline(options);

我试图检查折线是否包含任何数据,但在这两项检查中我也遇到了编译器错误:

if(polyline.getOptions() != null){
   polyline.setPoints(null); 
}

if(!polyline.getOptions().isEmpty()) {
   polyline.setPoints(null); 
}

检查 null 时出错:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.google.android.gms.maps.model.Polyline.getPoints()' on a null object reference

如何在 Activity 首次加载时检查多段线是否分配了任何点?

从您的 "coordList" 中删除所有条目并在您的 PolyLine 对象上调用 polyline.remove()mMap.clear() 以删除所有标记,然后再将新的 LatLng 值添加到您的坐标列表。

使这些 class 变量:

PolyLine mPolyline;
ArrayList<LatLng> mCoordList = new ArrayList<LatLng>();
GoogleMap mMap;

现在您所要做的就是在需要时添加多段线:

public void onMapReady(GoogleMap googleMap){

    mMap = googleMap;

    addPolylineToMap();
}

private void addPolylineToMap(){
    double[] receivedDataArray;
    double latitude;
    double longitude;
    // Clear the list first
    mCoordList.clear();

    for (int i = 0; i < coordinatesArray.size() - 1; i++) {
        receivedDataArray = coordinatesArray.get(i);

        latitude = receivedDataArray[0];
        longitude = receivedDataArray[1];

        mCoordList.add(new LatLng(latitude,longitude));
        Log.e(TAG, "List size = " + mCoordList.size());
    }

    //You can also call ...
    //mMap.clear();
    //...in order to remove all markings on the map

    if(mPolyline != null){
        mPolyline.remove();
    }

    options = new PolylineOptions().addAll(coordList).width(10).color(Color.BLUE).geodesic(true);
    mPolyline = mMap.addPolyline(options);
}

注意:我认为您可以优化对象 coordinatesArray 以提高效率。