我正在用Android开发应用程序,基本上它的作用是为您提供打开开关的选项,并在应用程序中打开服务,将您的位置数据记录到Firebase数据库中的Key。我已经做到了。
当用户打开开关时,它将创建一个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
我还尝试过通过对密钥进行硬编码来删除密钥,但是它仍然不能删除数据。我删除密钥的唯一方法是进入数据库并手动删除每个密钥。
这是数据库
这些键与上面所述的不同,因为我手动删除了这些键
答案 0 :(得分:1)
您有错字,请更改以下内容:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("userAvailable").child("Users");
对此:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("usersAvailable").child("Users");
usersAvailable
应该有一个s
与您的数据库相同。