![](/img/trans.png)
[英]How can I check user had registered and match data between data on firebase authentication and firebase Realtime Database?
[英]How can I check if my Firebase database has data for a certain user? (Android/Java)
当用户在我的android应用上使用firebase进行帐户注册时,需要将他们定向到可以添加一些单独信息(例如用户名)的屏幕。 该应用程序知道可以通过AuthStateListener来切换活动,因此当创建帐户或执行有人在此处登录代码时(此时,这里的意图都没有改变,请继续阅读以了解原因):
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");
}
// ...
}
};
在if块中,它检查用户是否等于null,这是我需要将意图更改为另一个活动的地方,他们将在其中输入用户名。 基本上,逻辑是,如果用户已经有一个用户名并且正在登录,那么他们将被定向到主屏幕活动,如果他们正在注册,则需要被定向到创建用户名的活动。 要知道我需要将其发送给哪个活动,我需要在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) {
}
});
使用dataSnapshots。 问题在于,仅当将数据添加到数据库时才触发此代码,因此,当用户只是注册并且从未向数据库添加用户名时,此方法将不会执行任何代码。 我该如何查询以查看数据库中的数据,只是检查某个用户那里是否有任何数据?
在所有情况下都会触发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文本。 但是,如果我想在用户没有简历的情况下显示一些文本,我只需添加其他代码,然后将文本设置为简历,例如:
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) {
}
});
}
您是否尝试在onCreate方法中使用addValueEventListener?
如果在onCreate方法中的侦听器中运行活动,则在打开活动时将触发一次。 所以我认为您在这里应该不会有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.