【问题标题】:SharedPreferences() Method: Password Appears as the Email/Username, as WellSharedPreferences() 方法:密码也显示为电子邮件/用户名
【发布时间】: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


【解决方案1】:

首先你可以使用 mEditor.commit() 一旦我认为你应该改变它。

另外一个,可能是你的strings.xml文件有问题,你可以试试改一下:

getString(R.string.name) -> "名称"

getString(R.string.password) -> "pw"

【讨论】:

    猜你喜欢
    • 2018-01-18
    • 2020-06-22
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2015-11-14
    • 2013-07-11
    相关资源
    最近更新 更多