我试图在对话框中访问EditText字符串,但我得到一个空对象引用错误,我不明白为什么:
txtLostCreds.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Create dialog to set new password
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
builder.setTitle(R.string.txtResetPassword);
builder.setView(R.layout.customresetpassworddialog);
final AlertDialog alert = builder.create();
builder.setPositiveButton(R.string.txtResetPassword, new DialogInterface.OnClickListener() {
final EditText resetNewPassword = alert.findViewById(R.id.resetNewPassword);
final EditText resetNewPasswordConfirm = alert.findViewById(R.id.resetNewPasswordConfirm);
@Override
public void onClick(final DialogInterface dialog, int which) {
assert resetNewPassword != null;
assert resetNewPasswordConfirm != null;
if (checkPasswords(resetNewPassword, resetNewPasswordConfirm)) {
// reset the password
RequestParams params = new RequestParams();
params.put("uuid", prefs.getString("myUUID", ""));
params.put("newpassword", resetNewPassword.getText().toString());
AsyncHttpRequest.get("lost_credentials", params, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
t.MyToast(getResources().getString(R.string.txtConnError), 5000);
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
if (responseString.equals("OK")) {
// All done. Close dialog
alert.cancel();
} else {
t.MyToast(getResources().getString(R.string.txtConnError) + responseString, 5000);
}
}
});
}
}
});
builder.show();
}
});
当我调用函数checkPasswords(resetNewPassword, resetNewPasswordConfirm)
时发生错误。我也尝试在findViewByID
上做一个View v
,但它也给出了同样的错误。
功能很简单:
private boolean checkPasswords(EditText resetNewPassword, EditText resetNewPasswordConfirm) {
if (!resetNewPassword.getText().toString().equals(resetNewPasswordConfirm.getText().toString())) {
resetNewPassword.setError(getResources().getString(R.string.txtDifferentPasswords));
resetNewPasswordConfirm.setError(getResources().getString(R.string.txtDifferentPasswords));
return false;
} else {
return true;
}
}
尝试保持对对话框视图的引用,或至少在控件创建对话框范围之外控制的部分。
更好的做法是创建一个DialogFragment,这是一种更好地控制对话框的好方法。当您的对话框管理了许多操作时,这种方式非常有用。
例如:尝试从Dialog获取输入并在单击“保存”按钮时将其传递给Activity。您可以使用onActivityResult()
将数据发送到您的活动。