从AlertDialog获取并比较密码

时间:2018-08-14 07:47:29

标签: java android passwords alertdialog

我目前正在尝试保护自己的SwitchPreference密码。按下该首选项时,将出现AlertDialog,要求输入密码。问题是我真的不知道如何从userinput获取密码并将其与首选项中的设置值进行比较。

我使用注释掉的方法进行了尝试,因此您可以看到我尝试过的内容。

这是我的 PreferencesActivity.java

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    Preference websitePref = findPreference(getString(R.string.preference_key));
    final SwitchPreference pwPref = (SwitchPreference) findPreference(getString(R.string.sperr_key));


   final  AlertDialog.Builder pw = new AlertDialog.Builder(this);
   final AlertDialog pwD = pw.create();
    pw.setTitle("Authentifikation (Standart:0000)");

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    String savedWebsite = sharedPrefs.getString(websitePref.getKey(), "");
    websitePref.setSummary(savedWebsite);

    final EditText password = findViewById(R.string.pwKey);


   //     SharedPreferences.Editor editor = getSharedPreferences("password", 0).edit();
 //     editor.putString("password", "test");
 //     editor.commit(); 

    pwPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener(){
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean onPreferenceChange(Preference preference, Object o){
            pw.setView(R.layout.pref_pw);
     //       SharedPreferences pref = getSharedPreferences("password", Context.MODE_PRIVATE);
     //       final String pass = pref.getString("password", null);
     //       password.setText(pass);
            if(pwPref.isChecked()){

                   pw.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
     //                       if(password.equals(pass)) {

                                pwPref.setChecked(false);
     //                       }else{

     //                       }
                        }
                    }).setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    }).show();

            }else{

                pwPref.setChecked(true);

            }
            return false;
        }

    });

}

还有我的 pref_pw.xml

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
    android:id="@string/pwKey"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:ems="10"
    android:inputType="textPassword"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

编辑:

感谢Roshaan Farrukh,现在我可以获取AlertDialog而不会出现错误,但是我无法比较该字符串。

我实现了SharedPreferences

final SharedPreferences.Editor editor = getSharedPreferences("password", Context.MODE_PRIVATE).edit();
    editor.putString("password", "test");
    editor.commit();

然后我将代码更改为此:

public boolean onPreferenceChange(Preference preference, Object o){

            pw.setView(R.layout.pref_pw);
            final View view = getLayoutInflater().inflate(R.layout.pref_pw,null,false);
            pw.setView(view);

            final SharedPreferences pref = getSharedPreferences("password", Context.MODE_PRIVATE);
            final EditText pwKey = (EditText) view.findViewById(R.string.pwKey);
            final String storedPassword = pref.getString("password",null);
            final String editTextPassword = pwKey.getText().toString();

            if(pwPref.isChecked()){

                   pw.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                            if(storedPassword.equals(editTextPassword)) {
                                pwPref.setChecked(false);

                            }else{

                            }
                        }
                    }).setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    }).show();

1 个答案:

答案 0 :(得分:1)

使用充气机获取对话框视图,并通过该视图通过调用view.findViewById(R.id.pwKey)来查找pwKey编辑文本。

 View view=getLayoutInflater().inflate(R.layout.pref_pw,null,false);
 EditText pwKey=(EditText) view.findViewById(R.id.pwKey);
 pw.setView(view);

现在,您可以将编辑文本中的文本与共享首选项中的文本进行比较。