ユーザーが初めてアプリケーションでGoogleアカウントにログオンしたとき、私はこのアクティビティをデータベースに作成しました。それは機能していますが、データベース内に複数のユーザーを作成しています。理由はわかりません。ユーザーが存在しない場合、ユーザーを作成するにはどうすればいいですか?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() == null) {
goLogInScreen();
} else {
final String userGoogleEmail = firebaseAuth.getCurrentUser().getEmail();
databaseUser.orderByChild("userEmail").equalTo(userGoogleEmail).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//User already exists
} else {
//Can create new user
String id = databaseUser.push().getKey();
User user = new User(id, userGoogleEmail, null);
databaseUser.child(id).setValue(user);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
};
DBに既存のユーザーがいない場合にのみ実行されますが、一度実行されると、そのユーザーの複数のエントリがDBに作成されますか?もしそうなら、DBにユーザーを何回作成するのですか? – Geremy
はい、データベースに既存のものがなく、実行されたときに、試したことがある場合もありますが、4,2,6回の間で異なります。 @geremy –
getCurrentUser()のみに頼るのではなく、共有環境設定の使用を検討してください。firebaseのsyncの問題かもしれません!最初のユーザーのユーザーログインがSharedPreferenceに値を格納している場合。また、ユーザーがアプリケーションに再度訪問する場合は、SharedPreferenceを取得しようとします。 – Xenolion