私のアプリでユーザーをログイン/登録するにはfirebase authUIを使用していますが、ユーザーが最初に登録したときと、私は、現在のUIDが存在するかどうか、それがユーザーであるかどうか、そして新しいユーザーが存在しないかどうかについて、自分のDBで "見る"ことをお勧めします。ValueEventListerがfirebaseデータベースを取得した後にコードを実行
以下は、正常に動作するコードですが、ValueEventListerの "呼び出し"は非同期で、ユーザーUIDをチェックすると、DBに書き込まれただけで実際には新しいユーザーであるために存在します。期待どおりに動作するようにコードを変更するにはどうすればよいですか?
@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);
}
}
「チェック」が機能しているかどうかを確認するためにコードにコメントしました。
私は理解しません。新しいユーザーを作成した後に新しいユーザーを作成する理由は何ですか? –