[英]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.