我正在使用firebase,并在signOut()
中添加了onBackPressed()
方法以返回登录活动。
但当我按“上一步”以注销时,我将返回登录活动,并在登录后返回下一个活动。
不知怎的我还是登录了。
当我按下后退按钮时,它在第二次或第三次之后工作。
真奇怪,我希望你能帮我…
下面是我的一些代码片段:
这是登录后活动中的onAuthStateChanged
:
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
FirebaseAuth.getInstance().signOut();
finish();
}
}
这是登录活动中的
onBackPressed()
: mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
curr_user = user;
Toast.makeText(LoginActivity.this, "yes", Toast.LENGTH_SHORT).show();
if(curr_user.getDisplayName() == null)
autoSignIn("email");
else
autoSignIn("google");
user.getUid());
} else {
Toast.makeText(LoginActivity.this, "out", Toast.LENGTH_SHORT).show();
}
}
};
这是开始下一个活动的
AuthStateListener()
方法:public void autoSignIn(String accType) {
if(accType.equals("email")) {
mDatabaseReference.child("users").orderByKey().equalTo(curr_user.getUid());
Query myTopPostsQuery = mDatabaseReference.child("users").orderByKey().equalTo(curr_user.getUid());
myTopPostsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
editor = pref.edit();
User user = snapshot.getValue(User.class);
editor.putString("DisplayName", user.username);
editor.commit();
intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("userID", curr_user.getUid());
startActivity(intent);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
else {
Toast.makeText(this,"google", Toast.LENGTH_SHORT).show();
txtWelcome.setText("Hello " + curr_user.getDisplayName());
intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("userID", curr_user.getUid());
editor = pref.edit();
editor.putString("DisplayName", curr_user.getDisplayName());
editor.commit();
startActivity(intent);
}
}
最佳答案
终于弄明白了,
在FirebaseAuth.getInstance().signOut();
和finish()
之后,它在onAuthStateChanged
中运行代码。
我取消了对方法user != null
的调用,它工作了。