【发布时间】:2022-01-04 10:40:39
【问题描述】:
在 Android 中,我在登录活动中使用了 SharedPreferences() 方法。但是,密码出现在两个字段中(密码 - 和用户名/电子邮件)。例如,当我在模拟器中运行活动时 - 我输入了电子邮件 (ABC@GMAIL.COM) 和密码 (ABC123);当我退出并重新进入活动(通过模拟器)时,保存的是密码(电子邮件:ABC123;密码:ABC123)。
代码:
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();
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);
}
});
checkSharedPreferences();
}
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);
}
}```
【问题讨论】:
-
Attach a debugger 同时保存和获取值以查看共享首选项中实际保存的值
-
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
标签: java android authentication sharedpreferences