Я занимаюсь разработкой приложения для 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](https://i.stack.imgur.com/XIG04.jpg)