我目前正在尝试保护自己的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();
答案 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);
现在,您可以将编辑文本中的文本与共享首选项中的文本进行比较。