Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取自定义对话框中包含的EditText的值_Java_Android_Android Edittext - Fatal编程技术网

Java 获取自定义对话框中包含的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

因此,我在我的应用程序中创建了一个自定义对话框,其中包含一个专门为数字设置格式的EditText字段。我已经将代码设置为在用户单击按钮时启动对话框。我遇到的问题是,当用户确认他们输入的信息时,我会得到如下错误:

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);