我正在使用Firebase数据库和Firebase身份验证,允许用户使用电子邮件/密码或Google登录进行登录。在登录活动中,我正在尝试检查用户是否使用Google登录,是第一次执行此操作还是不执行此操作。
如果这是他第一次签名,则会出现一个对话框,并要求用户提供年龄和性别;如果不是,则不应出现对话框。
我遇到的问题是,如果用户使用Google登录,则始终会显示对话框,无论是否是第一次。
这是我的代码,我试图检查用户是否第一次登录:
protected void updateActivity(FirebaseUser user) {
Log.d(TAG ,"updateActivity(FirebaseUser) - Ini");
final boolean[] exist = {false};
if(user != null) {
ArrayList<String> providers = (ArrayList<String>) user.getProviders();
if(!providers.isEmpty() && providers.get(0).equals("google.com")) {
username = user.getEmail().substring(0,user.getEmail().indexOf('@'));
String userId = user.getUid();
Query query = mRef.orderByChild("userName").equalTo(username);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot userSnapShot : dataSnapshot.getChildren()){
if (!userSnapShot.getKey().equals(null) && !userSnapShot.getKey().isEmpty()) {
exist[0] = true;
Intent i = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(i);
finish();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
if(providers.get(0).equals("password")) {
Intent i = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(i);
finish();
}
showDialog();
}
Log.d(TAG ,"updateActivity(FirebaseUser) - Fi");
}
showDialog方法:
public void showDialog() {
android.app.FragmentManager fm = getFragmentManager();
DialogBox myDialog = new DialogBox();
myDialog.show(fm,"MyDialog");
}
如你所见,我有一个布尔变量&#34;存在&#34;如果userSnapshot具有用户登录用户名之类的用户名,那么它应该是真的,在这种情况下,不应出现对话框。
如果&#34;存在&#34;如果值为false,则应出现对话框。
当用户第一次签名时我没有问题,我的问题是当用户已经登录时,他正在重新登录。
我不知道为什么
这段代码:
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot userSnapShot : dataSnapshot.getChildren()){
if (!userSnapShot.getKey().equals(null) && !userSnapShot.getKey().isEmpty()) {
exist[0] = true;
Intent i = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(i);
finish();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
执行两次,即使登录的用户之前已经登录过,并且他的用户名存在于数据库中,对话框显示1秒钟,然后启动另一个活动(HomeActivity)。 / p>
这是我在Firebase中的用户数据库:
所以,任何帮助都将非常感激。