【发布时间】:2016-11-06 16:27:52
【问题描述】:
我对 Android 和 firebase 完全陌生,当我尝试从 Firebase 退出时遇到了一些问题。
我的一段代码在底部..
在 onAuthStateChanged 监听器中,我尝试创建一个 Firebase 用户并获取当前用户,以检查它是否不为空(根据 Firebase 文档,这意味着用户已登录)或空,这意味着用户不是登录..
那么问题来了..
出于测试/好奇的目的,如果用户已登录,我会尝试更新用户个人资料并设置自定义显示名称.. 看看会发生什么。
似乎在更新配置文件之后,更具体地说是该行 “user.updateProfile(profileUpdates);”破坏了 signout() 函数。
如果我注释掉“user.updateProfile(profileUpdates);”这一行signout() 函数似乎工作正常!
你能指出我做错了什么吗?
某处是否存在 firebase 用户的重复实例?
提前致谢!
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private FirebaseAuth FireAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseDatabase mFireDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FireAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// already signed in
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("SuperMan").build();
user.updateProfile(profileUpdates); // This breaks it!
signoutButton.setText(user.getDisplayName().toString());
} else {
// not signed in
}
}
};
}
public void signin(String email, String password){
FireAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("myTEST","signInWithEmailAndPassword:complete:"+task.isSuccessful());
}
});
}
private void signout(){
//FireAuth.getInstance().signOut();
FireAuth.signOut();
}
public void getDisplayName(){
if (FireAuth.getCurrentUser() !=null){
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("SuperMan").build();
FireAuth.getCurrentUser().updateProfile(profileUpdates);
signoutButton.setText(FireAuth.getCurrentUser().getUid().toString());
if(FireAuth.getCurrentUser().isAnonymous()){
signoutButton.setText("Anonymous");
}
}else{
signoutButton.setText("empty..");
}
}
@Override
public void onStart() {
super.onStart();
FireAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop(){
super.onStop();
FireAuth.removeAuthStateListener(mAuthListener);
}
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.signinButton:
signin(loginEditText.getText().toString(),passwordEditText.getText().toString());
break;
case R.id.signoutButton:
signout();
break;
case R.id.button3:
getDisplayName();
break;
}
}}
【问题讨论】:
标签: android firebase firebase-authentication