0
爲了在我的應用程序中登錄/註冊用戶,我使用了firebase authUI,我想知道用戶什麼時候第一次註冊,何時他是返回用戶誰只是登錄。我認爲這是一個好主意,「在數據庫中查看」是否存在當前的UID,是否存在用戶,以及是否存在新用戶。ValueEventLister檢索到Firebase數據庫後運行代碼
下面是可正常工作的代碼,但ValueEventLister「調用」是異步的,當它檢查用戶UID時,它已經存在,因爲它只是寫在數據庫中,但實際上它是一個新用戶。我應該如何修改我的代碼才能按預期工作?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
final FirebaseUser signedUser = mAuth.getCurrentUser();
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "onDataChange: " + dataSnapshot.child(getString(R.string.users)).child(signedUser.getUid()).exists());
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
};
mDatabase.addListenerForSingleValueEvent(postListener);
// uid = setNullToDefaultValue(signedUser.getUid());
// displayName = setNullToDefaultValue(signedUser.getDisplayName());
// email = setNullToDefaultValue(signedUser.getEmail());
// photoUrl = setNullToDefaultValue(signedUser.getPhotoUrl().toString());
// provider = setNullToDefaultValue(signedUser.getProviderId());
// phoneNumber = setNullToDefaultValue(signedUser.getPhoneNumber());
//
// Log.d(TAG, "onActivityResult: User Signed In!");
// User mUser = new User(uid, displayName, email, photoUrl, provider, phoneNumber);
// Map<String, Object> userMap = mUser.toMap();
// mDatabase.child(getString(R.string.users)).child(mAuth.getCurrentUser().getUid()).updateChildren(userMap);
}
}
我評論代碼,以查看是否「檢查」的作品和它的作用。
我不明白。爲什麼要在創建新用戶後創建新用戶? –