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。它在失败时触发了吗?不,除了firstlogd
之外什么都没有。你认为他能上网吗?是的,它在工作,但一点也不。Firestore没有更新。请看一下这个主要链接:@ShoaibK。它触发了吗关于失败?不,除了第一次,什么都没有。你认为他能上网吗?