Карты Google для Android - как проверить, является ли Polyline нулевым - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь проверить, содержит ли моя переменная polyline присвоенный polylineoptions.

Когда загружается действие, автоматически вызывается метод 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); 
}

ошибка при проверке на ноль:

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

Как проверить, есть ли у полилинии какие-либо точки, назначенные ей при первой загрузке действия?

1 Ответ

0 голосов
/ 07 мая 2018

Удаление всех записей из вашего "ordinList "и вызов polyline.remove() для вашего объекта PolyLine или mMap.clear() для удаления всех отметок перед добавлением новых значений LatLng в ваш список координат.

Сделать эти переменные класса:

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 для большей эффективности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...