Firebase 在Firestore中检索实时数据库值

Firebase 在Firestore中检索实时数据库值,firebase,firebase-realtime-database,google-cloud-firestore,Firebase,Firebase Realtime Database,Google Cloud Firestore,实际上,我想向用户显示联机/脱机状态。我阅读并实现了onDiscount()以更新折扣时isOnline=false的实时数据库,但问题是当用户折扣时,该数据在Firestore内部不会更新 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

实际上,我想向用户显示联机/脱机状态。我阅读并实现了
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) {

            }
        });


}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Map user=newhashmap();
myRef.child(在线)。setValue(true);
myRef.child(IS_ONLINE).onDisconnect().setValue(false);
myRef.child(“isOnline”).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
status=snapshot.getValue(Boolean.class);
用户输入(“isOnline”,状态);
doctRef.set(用户);
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}

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

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();
}
}
之后,当应用程序启动时调用此服务。例如,在Splashscreen活动中

    //Start closing service
    final Intent stickyService = new Intent(this, ClosingService.class);
    startService(stickyService);
别忘了在androidmanifest上创建服务

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

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

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();
}
}
之后,当应用程序启动时调用此服务。例如,在Splashscreen活动中

    //Start closing service
    final Intent stickyService = new Intent(this, ClosingService.class);
    startService(stickyService);
别忘了在androidmanifest上创建服务

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


问题解决了吗?没有!实际上,为了从realtime到firestore检索数据,我使用了后台服务,但问题是在哪里调用这些服务。如果我在
onDestroy()
中调用这些服务,那么它们将无法工作..:(你解决问题了吗?没有!事实上,为了从realtime向firestore检索数据,我使用了后台服务,但问题是在哪里调用这些服务。如果我在
onDestroy()
中调用这些服务,那么它们将无法工作(是的,它在工作,但一点也不。Firestore没有更新。请看一下这个主要链接:@ShoaibK。它在失败时触发了吗?不,除了first
logd
之外什么都没有。你认为他能上网吗?是的,它在工作,但一点也不。Firestore没有更新。请看一下这个主要链接:@ShoaibK。它触发了吗关于失败?不,除了第一次,什么都没有。你认为他能上网吗?