使用NonHierarchicalDistanceBasedAlgorithm从ClusterManager中删除项目的NullPointerException

时间:2017-01-19 14:39:44

标签: java android google-maps markerclusterer

我正在使用Google Map和群集开发Android应用程序。

当我尝试从群集管理器中删除项目时,我收到了空指针异常。

  E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.remove(java.lang.Object)' on a null object reference
        at com.google.maps.android.quadtree.PointQuadTree.remove(PointQuadTree.java:176)
        at com.google.maps.android.quadtree.PointQuadTree.remove(PointQuadTree.java:171)
        at com.google.maps.android.quadtree.PointQuadTree.remove(PointQuadTree.java:153)
        at com.google.maps.android.clustering.algo.NonHierarchicalDistanceBasedAlgorithm.removeItem(NonHierarchicalDistanceBasedAlgorithm.java:95)
        at com.google.maps.android.clustering.algo.PreCachingAlgorithmDecorator.removeItem(PreCachingAlgorithmDecorator.java:61)
        at com.google.maps.android.clustering.ClusterManager.removeItem(ClusterManager.java:161)
        at com.company.myApp.controllers.MapClusterManager.removeItem(MapClusterManager.java:72)

抛出异常的代码如下:

  if(clusterManager.getAlgorithm().getItems().contains(mapClusterItem)) {
        clusterManager.removeItem(mapClusterItem); // <-- NPE here
        clusterManager.cluster();
  }

正如您所见,我实际上是在删除之前检查项目是否存在。

聚类设置如下:

    clusterManager = new ClusterManager<MapClusterItem>(context, googleMap);
    algo = new NonHierarchicalDistanceBasedAlgorithm<MapClusterItem>();
    clusterManager.setAlgorithm(algo);

问题是PointQuadTree.remove(double x,double y,T item)(Google Library)会抛出异常。 有谁知道如何解决它?

GridBasedAlgoritm不适合我的情况。我想用

  

NonHierarchicalDistanceBasedAlgorithm

我正在使用Google Maps Utils中的群集库。

compile 'com.google.maps.android:android-maps-utils:0.4.+'

1 个答案:

答案 0 :(得分:0)

这是图书馆中的一个错误,很快就会发送一个固定版本:

https://github.com/googlemaps/android-maps-utils/issues/348