【发布时间】:2019-08-28 18:48:45
【问题描述】:
第一次调用此 (user = firebaseAuth.getCurrentUser();) 后,Firebase 用户返回 null。
当应用程序第一次安装时,firebaseAuth.getCurrentUser() 正在返回用户,但是当它从第一个活动移动到另一个活动并且在 firebaseAuth.getCurrentUser() 每次都返回 null 之后调用 sigh Out 按钮时。
package com.example.firebaselogin;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class logIn extends AppCompatActivity {
EditText userName, pwd;
TextView signUpHere;
Button loginButton;
private FirebaseAuth firebaseAuth;
//private FirebaseAuth.AuthStateListener listener;
ProgressDialog progressDialog;
FirebaseUser user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_in);
firebaseAuth = FirebaseAuth.getInstance();
progressDialog = new ProgressDialog(this);
user = firebaseAuth.getCurrentUser();
userName = findViewById(R.id.userName);
pwd = findViewById(R.id.pwd);
signUpHere = findViewById(R.id.signUpHere);
loginButton = findViewById(R.id.loginButton);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressDialog.setMessage("Please Wait");
progressDialog.show();
Log.i("Userrrr", String.valueOf(user));
if(validate()) {
if (user != null) {
firebaseAuth.signInWithEmailAndPassword(userName.getText().toString().trim(), pwd.getText().toString().trim()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Intent intent = new Intent(logIn.this, WelcomePage.class);
startActivity(intent);
Toast.makeText(getApplicationContext(), "Successful", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
} else {
Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}
});
} else {
Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}
}
});
signUpHere.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
});
}
private Boolean validate() {
Boolean result = false;
String name = userName.getText().toString();
String password = pwd.getText().toString();
if(name.isEmpty() || password.isEmpty()) {
Toast.makeText(getApplicationContext(), "Enter all details", Toast.LENGTH_SHORT).show();
} else {
result = true;
}
return result;
}
}
当firebaseAuth.getCurrentUser()第一次被调用时,它是
返回 (2019-08-29 00:08:14.561 8165-8165/com.example.firebaselogin I/Userrrr: com.google.firebase.auth.internal.zzk@44ffb65) 但之后 signOut 是从下一个活动触发的, firebaseAuth.getCurrentUser() 每次都返回 null 2019-08-29 00:08:24.651 8165-8165/com.example.firebaselogin I/Userrrr: null``
【问题讨论】:
-
当signout被调用时,它会注销用户会话。所以不会有用户,它显然返回null
-
但进入登录活动后无法再次登录。调用注销后如何获取用户?
-
刚刚删除 if(user != null) {} line...
标签: java android firebase firebase-authentication