在Firestore中检索实时数据库值



实际上我想向用户显示在线/离线状态。我阅读了 https://firebase.google.com/docs/firestore/solutions/presence 并实施了onDiscount()来更新isOnline = false折扣的实时数据库,但问题是当用户打折时,这些数据不会在Firestore内部更新。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Map<String, Object> user = new HashMap<>();

myRef.child(IS_ONLINE).setValue(true);
myRef.child(IS_ONLINE).onDisconnect().setValue(false);
myRef.child("isOnline").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
status = snapshot.getValue(Boolean.class);
user.put("isOnline", status);
doctRef.set(user);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});

}

我创建了一个服务来调用此方法,您可以尝试这样做。一旦应用程序真正从后台删除,此服务将触发。

public class ClosingService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Handle application closing
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child(getString(R.string.USER));
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null) { databaseReference.child(firebaseUser.getUid()).child(getString(R.string.sedang_online)).setValue(false);
databaseReference.child(firebaseUser.getUid()).child(getString(R.string.lastSeen)).setValue(System.currentTimeMillis());
}
// Destroy the service
stopSelf();
}
}

之后,在启动应用程序时调用此服务。例如,在初始屏幕活动中。

//Start closing service
final Intent stickyService = new Intent(this, ClosingService.class);
startService(stickyService);

并且不要忘记在androidmanifest上创建服务。

<service
android:name=".u.ClosingService"
android:stopWithTask="false" />

最新更新