Java 我无法删除geofire关键出口地图上的标记

Java 我无法删除geofire关键出口地图上的标记,java,android,google-maps-markers,geofire,Java,Android,Google Maps Markers,Geofire,当任何驾驶员上网时,我试图在地图上显示所有车辆 因此,使用geofire工作正常,但在删除时,我无法删除 在地图上清除地图正在被清除,但我不知道何时清除地图以使用asnk概念 public static HashMap<String,Marker> markers = new HashMap<>(); synchronized private static void findAllDriverInRadiusForUniqueVehicle(String s

当任何驾驶员上网时,我试图在地图上显示所有车辆 因此,使用geofire工作正常,但在删除时,我无法删除 在地图上清除地图正在被清除,但我不知道何时清除地图以使用asnk概念

  public static HashMap<String,Marker>  markers = new HashMap<>();

 synchronized private static void findAllDriverInRadiusForUniqueVehicle(String 
 selectedVehicleCategory, int limitKm, LatLng srcLocation,String callValue) {
    Log.d(TAG, "findAllDriverInRadiusForUniqueVehicle: calling from = "+callValue);
    //find driver in radius
    GeoFire gf = new GeoFire(DR_DRIVER_LOC_TABLE.child(selectedVehicleCategory));
    GeoQuery geoQuery = gf.queryAtLocation(new GeoLocation(srcLocation.latitude, srcLocation.longitude),limitKm);
    geoQuery.removeAllListeners();

    Log.d(TAG, "findAllDriverInRadiusForUniqueVehicle: driverLocation = " + DR_DRIVER_LOC_TABLE.child(Common.SELECTED_VEHICLE_CATEGORY));

    geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, GeoLocation location) {
            Log.d(TAG, "onKeyEntered: i am starting near driver found at location = "+location+", key = "+key);

            //use key to get the email of the users
            Common.FOUND_DRIVER_LOCATION = location;
            Common.driverId = key;
            Common.isDriverFound = true;


            progressBar.setVisibility(View.INVISIBLE);
            txtProgress.setVisibility(View.INVISIBLE);


            FirebaseDatabase.getInstance().getReference(Common.user_driver_tbl)  //user_rider_tbl
                    .child(key)
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            Common.FOUND_DRIVER_IN_LIMIT = dataSnapshot.getValue(Driver.class);
                            Log.d(TAG, "onDataChange: driver = " + Common.FOUND_DRIVER_IN_LIMIT + ", location = " + location);


                            if (Common.FOUND_DRIVER_IN_LIMIT != null) {


                                if (Common.FOUND_DRIVER_IN_LIMIT.getCarType().equalsIgnoreCase(selectedVehicleCategory)) {


                                    // Adding new elements to the HashSet
                                    Common.UNIQUE_VEHICLES.add(dataSnapshot.getKey());

                                    Log.d(TAG, "onDataChange: Common.SELECTED_VEHICLE_CATEGORY = " + selectedVehicleCategory);
                                    addDriverMarker(selectedVehicleCategory,Common.FOUND_DRIVER_IN_LIMIT.getName(), dataSnapshot.getKey(), location);
                                }


                            } else {

                                Common.isDriverFound = false;
                            }

                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                        }
                    });

            Log.d(TAG, "onKeyEntered: i am exiting");
        }

        @Override
        public void onKeyExited(String key) {


            Log.d(TAG, "onKeyExited: driver has exited the radios or driver location is off key = "+key);


            Log.d(TAG, "onKeyExited: removing marker key =  "+key);
            markers.get(key).remove();   //here code is successfully executing but not removing
            Log.d(TAG, "onKeyExited: removed marker key =  "+key);




             Common.homeRadiusAll =Integer.parseInt(context.getString(R.string.home_distance));

findAllDriverInRadiusForUniqueVehicle(selectedVehicleCategory,Common.LIMIT,srcLocation,"2");


        }

        @Override
        public void onKeyMoved(String key, GeoLocation location) {
            Log.d(TAG, "onKeyMoved: ="+key);
        }

        @Override
        public void onGeoQueryReady() {
            Log.d(TAG, "onGeoQueryReady: is starting distance = " + Common.homeRadiusAll);
            if (Common.homeRadiusAll <= Common.LIMIT) //distance just find for 3km
            {
                Log.d(TAG, "onGeoQueryReady if : distance = " + Common.homeRadiusAll);

            }else{


            }
            Log.d(TAG, "onGeoQueryReady: is ending  ");
        }

        @Override
        public void onGeoQueryError(DatabaseError error) {
            Log.d(TAG, "onGeoQueryError: no driver found in given query");
        }
    });

    Log.d(TAG, "loadAllAvailableDrivers:  Common.FOUND_DRIVER_LOCATION = "+ 
Common.FOUND_DRIVER_LOCATION);
}
试试这个

public void removeMarker(Marker marker) {
       if (marker != null) {
           marker.remove();            
       }
  }
您可以使用此方法从地图中删除标记列表

希望对你有帮助

public void removeMarker(Marker marker) {
       if (marker != null) {
           marker.remove();            
       }
  }