Как удалить Geofire Key из базы данных Firebase.- JAVA - PullRequest
2 голосов
/ 28 мая 2019

Я занимаюсь разработкой приложения для Android, и в основном оно дает вам возможность включить переключатель, и в приложении открывается служба, которая регистрирует данные о вашем местонахождении в ключе в базе данных Firebase.и мне удалось это сделать.

Когда пользователь включает коммутатор, он создает UUID и помещает информацию в этот узел.и все это прекрасно работает, однако я борюсь за то, чтобы удалить этот ключ.

Я перепробовал все, и просмотрел все остальные сообщения, но, похоже, ничего не работает.

Мне удалось создатьUUID в Службе, подобной этой

static String uniqueID = UUID.randomUUID().toString();

, и она сохраняет информацию о местоположении в этот Ключ, как этот


    LocationCallback mLocationRequestCallback = new LocationCallback(){
        @Override
        public void onLocationResult(LocationResult locationResult) {
            for(Location location : locationResult.getLocations()){
                mLastLocation = location;
                DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("usersAvailable").child("Users");

                GeoFire geoFire = new GeoFire(userRef);
                geoFire.setLocation(uniqueID, new GeoLocation(mLastLocation.getLongitude(), mLastLocation.getLatitude()), new GeoFire.CompletionListener() {
                    @Override
                    public void onComplete(String key, DatabaseError error) {
                        Log.d(TAG,"Succesfully added "+uniqueID);
                    }
                });

            }
        }
    };

, и я пытаюсь удалитьключ, как только служба была остановлена, как это.

    @Override
    public void onDestroy() {
        super.onDestroy();
        mFusedLocationClient.removeLocationUpdates(mLocationRequestCallback);
        wakeLock.release();
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("userAvailable").child("Users");
        ref.child(uniqueID).removeValue();

      ref.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
              if(dataSnapshot.hasChild(uniqueID)) {
                  dataSnapshot.getRef().removeValue();
              }
          }

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

          }
      });

        GeoFire geoFire = new GeoFire(ref);
        geoFire.removeLocation(uniqueID, new GeoFire.CompletionListener() {
            @Override
            public void onComplete(String key, DatabaseError error) {
                Log.d(TAG, "Removed Location Successfully: "+uniqueID);
                Log.e(TAG,key+"\n"+error);
            }
        });
    }

Это журнал, который я получаю, кажется, он работает, removeLocation, но все равно ничего не удаляет

D/GeoJobService: Removed Location Successfully: 63825afd-7710-4cd7-b799-7be049281862
E/GeoJobService: 63825afd-7710-4cd7-b799-7be049281862
    null

Я также попытался удалить ключ, жестко закодировав ключ, и он все еще не удаляет данные. Единственный способ удалить ключи - это зайти в базу данных и вручную удалить каждый ключ.

РЕДАКТИРОВАТЬ

Вот база данных

Ключи отличаются от того, что указано выше, потому что я удалил эти ключивручную

Database

1 Ответ

1 голос
/ 28 мая 2019

У вас есть опечатка, измените следующее:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("userAvailable").child("Users");

на это:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("usersAvailable").child("Users");

usersAvailable должно иметь s, чтобы быть таким же, как ваша база данных.

...