【发布时间】:2016-10-19 23:48:18
【问题描述】:
我正在使用 Firebase,并在 onBackPressed() 中添加了 signOut() 方法以返回登录活动。
但是当我按“返回”退出登录时,我会返回登录活动,onAuthStateChanged在登录后将我带回下一个活动。
不知怎的,我仍然登录。
当我按下后退按钮第二次或第三次后它会起作用。 真的很奇怪,希望你能帮帮我。。 这是我的代码的一些 sn-ps:
这是登录后活动中的onBackPressed():
@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();
}
}
这是登录活动中的AuthStateListener():
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();
}
}
};
这是启动下一个活动的autoSignIn() 方法:
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);
}
}
【问题讨论】:
标签: android firebase firebase-realtime-database firebase-authentication