gpt4 book ai didi

java - 如何检查我的 Firebase 数据库是否包含特定用户的数据? (安卓/ java )

转载 作者:行者123 更新时间:2023-11-29 08:34:36 24 4
gpt4 key购买 nike

当用户在我的 Android 应用程序上使用 firebase 创建帐户时,他们需要被引导到一个屏幕,在那里他们可以添加一些单独的信​​息,例如用户名。该应用程序知道通过 AuthStateListener 切换 Activity ,因此当创建帐户或有人登录时,将执行此处的代码(目前此处没有更改 Intent ,请继续阅读以了解原因):

        mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
userID = user.getUid();
toastMessage("User has signed in: " + user.getEmail());


} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// ...
}
};

在检查用户是否不等于 null 的 if block 中,这是我需要将 Intent 更改为另一个 Activity 的地方,他们将在其中输入用户名。基本上逻辑是,如果用户已经有用户名并且他们刚刚登录,那么他们将被定向到主屏幕 Activity ,如果他们正在注册,他们需要被定向到他们创建用户名的 Activity 。要知道我需要将他们发送到哪个 Activity ,我需要在 firebase 数据库中查看代码并查看他们的帐户是否已有用户名。在这种情况下,我无法弄清楚如何从 firebase 读取数据,似乎从数据库读取的唯一方法(根据其他人的说法)是通过这样的 onDataChange 方法:

        mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "This: "+dataSnapshot.getValue());
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

它使用数据快照。问题在于此代码仅在将数据添加到数据库时触发,因此当用户只是注册并且从未向数据库添加用户名时,此方法不会执行任何代码。如何查询数据库中的数据以检查某个用户是否有任何数据?

最佳答案

OnDatachange 在所有情况下都会触发,如果用户添加数据、删除数据、更改数据等。

要检查用户是否已有用户名,请在 OnDatachange 中执行此操作:

if(dataSnapshot.exists()){
//GO TO OTHER ACTIVITY
]else{
//GO TO SET USER DATA ACTIVITY
]

请参阅我的一个实现示例:

if (user !=null){
DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio");

myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
bio.setText(dataSnapshot.getValue(String.class));

}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

在此示例中,如果 user_bio 存在,则将文本设置为 userbio(如果不存在,则什么都不做)。在用户第一次登录我的应用程序时,此方法什么都不做,但当用户添加 bio 时,此方法在 userbio 文本中设置 bio 文本。但是如果我想在用户没有生物的情况下显示一些文本,我只需添加 na else 并将文本设置为生物例如:

if (user !=null){
DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio");

myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
bio.setText(dataSnapshot.getValue(String.class));
}else{
bio.setText("no user bio");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

关于java - 如何检查我的 Firebase 数据库是否包含特定用户的数据? (安卓/ java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com