Java 获取自定义对话框中包含的EditText的值
因此,我在我的应用程序中创建了一个自定义对话框,其中包含一个专门为数字设置格式的EditText字段。我已经将代码设置为在用户单击按钮时启动对话框。我遇到的问题是,当用户确认他们输入的信息时,我会得到如下错误:Java 获取自定义对话框中包含的EditText的值,java,android,android-edittext,Java,Android,Android Edittext,因此,我在我的应用程序中创建了一个自定义对话框,其中包含一个专门为数字设置格式的EditText字段。我已经将代码设置为在用户单击按钮时启动对话框。我遇到的问题是,当用户确认他们输入的信息时,我会得到如下错误: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object refe
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
知道我做错了什么吗?下面是我的对话框充气器和按钮点击处理程序的完整代码
public Dialog onCreateDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get the layout inflater
LayoutInflater inflater = this.getLayoutInflater();
Log.i("INFO","Creating Dialog...");
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.goaldialog, null))
// Add action buttons
.setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText et = (EditText) findViewById(R.id.GoalChooser);
Integer goalNumber = Integer.parseInt(et.getText().toString());
Log.i("INFO",Integer.toString(goalNumber));
dialog.dismiss();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
return builder.create();
}
我对android和Java还不熟悉,所以非常感谢您的帮助
UPDATEintrepidkarthi的回答解决了我最初的问题,但现在返回的字符串如下所示:
07-22 14:13:43.687 29972-29972/com.collusion.serviceassistant D/INFO﹕ [ 07-22 14:13:43.687 29972:29972 D/AndroidRuntime ]
Shutting down VM
我使用以下命令从EditText获取文本:
String goalNumberString = String.valueOf(et.getText());
试试这个
public Dialog onCreateDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get the layout inflater
LayoutInflater inflater = this.getLayoutInflater();
Log.i("INFO","Creating Dialog...");
View view = inflater.inflate(R.layout.goaldialog, null);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(view)
// Add action buttons
.setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText et = (EditText)view.findViewById(R.id.GoalChooser);
Integer goalNumber = Integer.parseInt(et.getText().toString());
globalVariable = goalNumber;
Log.i("INFO",Integer.toString(goalNumber));
dialog.dismiss();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
return builder.create();
}
使用setView()时,将视图实例捕获到变量中,然后可以使用findViewById获取EditText:
final View view=inflater.inflate(R.layout.goaldialog, null);
builder.setView(view)
.setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText et = (EditText)view.findViewById(R.id.GoalChooser);
Integer goalNumber = Integer.parseInt(et.getText().toString());
Log.i("INFO",Integer.toString(goalNumber));
dialog.dismiss();
}
})
这是错误的指示:
EditText et = (EditText)onCreateDialog().findViewById(R.id.GoalChooser);
例如:
mEdit = (EditText)findViewById(R.id.edittext);
String content = mEdit.getText().toString();
像这样把它放在这里:
public Dialog onCreateDialog() {
final EditText et = (EditText) findViewById(R.id.GoalChooser);
它有用吗?我只是猜测,问题是您的EditText为空,因为您是从另一个上下文中引用的(您没有使用活动的上下文来实例化该编辑文本)。当我们从布局xml文件使用充气器.inflate时,我们需要在findViewById之前添加视图
View view = inflater.inflate(R.layout.goaldialog, null);
EditText et=(EditText)view.findViewById(R.id.GoalChooser) 是的,我只是要等现在我有个奇怪的问题。EditText返回的值如下:07-22 14:11:01.649 28038-28038/com.collusion.serviceassistant I/INFO﹕ [07-22 14:11:01.649 28038:28038 D/AndroidRuntime]。我使用以下方法获取值:String goalNumberString=String.valueOf(et.getText());更新问题中的完整日志在您关闭
对话框后是否尝试获取字符串
一次?使用全局变量获取存储的值。
View view = inflater.inflate(R.layout.goaldialog, null);