添加Firebase身份验证后,在Android Studio中使用SharedPreferences()方法时出错(登



在添加Firebase之前,我的代码一直有效。这是我的登录页面,SharedPreferences不起作用。当我点击登录按钮时,密码会弹出为用户名和密码,然后当我重新运行模拟器时,用户名和密码为空。请帮我找到错误:


import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
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;
EditText etPassword;
Button loginBtn;
Button registerBtn;
private SharedPreferences mPreferences;
private SharedPreferences.Editor mEditor;
private static String TAG = "Michael's Tracking --> ";
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.d(TAG, "Start onCreate");
username = findViewById(R.id.username);
etPassword = findViewById(R.id.etPassword);
loginBtn = findViewById(R.id.registerBtn);
registerBtn = findViewById(R.id.toLoginBtn);
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
mEditor = mPreferences.edit();
mAuth = FirebaseAuth.getInstance();
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
if(currentUser != null){
currentUser.reload();
}
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = username.getText().toString();
String pass = etPassword.getText().toString();
String stName = email;
mEditor.putString(getString(R.string.name), stName);
mEditor.commit();
String stPassword = pass;
mEditor.putString(getString(R.string.password), stPassword);
mEditor.commit();
checkSharedPreferences();
mAuth.signInWithEmailAndPassword(email, pass)
.addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithEmail:success");
FirebaseUser user = mAuth.getCurrentUser();
startActivity(new Intent(Login.this, MainPage.class));
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithEmail:failure", task.getException());
Toast.makeText(Login.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
});
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent registerPage = new Intent(Login.this, Register.class);
startActivity(registerPage);
}
});
}
private void checkSharedPreferences() {
String stName, stPassword;
stName = mPreferences.getString(getString(R.string.name), "");
stPassword = mPreferences.getString(getString(R.string.password), "");
username.setText(stName);
etPassword.setText(stPassword);
}
}```
Thank you very much!

checkSharedPreferences()方法不应该在onClick内部调用,它是用于恢复数据的,所以应该在开始时调用,所以在onCreate中引用Views(findViewById(和首选项(mPreferencesmEditor(

成功登录后,使用共享首选项存储用户名和密码。

mAuth.signInWithEmailAndPassword(email, pass)
.addOnCompleteListener(Login.this, new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithEmail:success");
FirebaseUser user = mAuth.getCurrentUser();
mEditor.putString("Useranme", stName);
mEditor.putString("Password", stPassword);
mEditor.commit();
startActivity(new Intent(Login.this, MainPage.class));
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithEmail:failure", task.getException());
Toast.makeText(Login.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
});         

最新更新