@Override
public void onStart(){
super.onStart();
mDatabaseReference.child("Online").setValue(true);
}
@Override
public void onStop(){
super.onStop();
mDatabaseReference.child("Online").setValue(false);
}
我当前的代码无法执行该操作以查看用户是否在线,人们告诉我可以使用共享首选项来实现目标,但是我不确定如何使用共享首选项来编辑用户。数据库值...我仅使用共享的首选项来检查用户是否通过了一项活动以在下一次跳过该活动(注册活动和类似的活动仅需要一次访问) 有人可以帮我了解如何使用共享首选项检查用户是否在线
答案 0 :(得分:1)
您可以使用此代码。就我而言,效果很好
@Override
protected void onStart()
{
super.onStart();
currentUser = mAuth.getCurrentUser();
if (currentUser == null)
{
LogOutUser();
}
else if(currentUser != null)
{
UsersReference.child("online").setValue("true");
}
}
答案 1 :(得分:1)
在这种情况下,无需使用SharedPreferences
。实现此目的的一种简单方法是对数据库中的每个用户使用Online
属性,以查看该属性是否在线。为此,我建议您使用Firebase的内置onDisconnect()
方法。它使您可以预定义将在客户端变为disconnected
后立即执行的操作。
请参见Firebase documentation for presence。
您还可以检测用户的连接状态。对于许多与状态相关的功能,让您的应用知道何时为online
或offline
很有用。 Firebase实时数据库在以下位置提供特殊位置:
/.info/connected`
每次Firebase实时数据库客户端的连接状态更改时,哪个更新。这也是官方文档中的示例:
DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
System.out.println("connected");
} else {
System.out.println("not connected");
}
}
@Override
public void onCancelled(DatabaseError error) {
System.err.println("Listener was cancelled");
}
});