Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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 无法从alertDialog-android studio中的两个editText字段更新我的字符串和双参数_Java_Android_String_Onclicklistener_Android Alertdialog - Fatal编程技术网

Java 无法从alertDialog-android studio中的两个editText字段更新我的字符串和双参数

Java 无法从alertDialog-android studio中的两个editText字段更新我的字符串和双参数,java,android,string,onclicklistener,android-alertdialog,Java,Android,String,Onclicklistener,Android Alertdialog,我的程序是计算人的数量,程序是动态工作的(姓名的数量根据用户的不同而变化),因此我想让用户通过创建一个AlertDialog框来添加他想要的人,问题是: 我试图从AlertDialog中获取姓名和年龄,但不幸的是,我的私有变量没有更新…感谢帮助 private String name; // Initialized later in the program to "" private Double age; // also initilized to 0 .

我的程序是计算人的数量,程序是动态工作的(姓名的数量根据用户的不同而变化),因此我想让用户通过创建一个
AlertDialog
框来添加他想要的人,问题是: 我试图从
AlertDialog
中获取姓名和年龄,但不幸的是,我的私有变量没有更新…感谢帮助

    private String name;  // Initialized later in the program to ""
    private Double age;   // also initilized to 0 
    .
    .
    . 
    .
    dmAvarage = new AlertDialog.Builder(this);
    dmAvarage.setTitle("add");
    dmAvarage.setMessage("please enter name and age" + "\n");

    TextView lblName = new TextView(this);
    TextView lblPoints = new TextView(this);
    lblName.setText("name:");
    lblPoints.setText("age:");

    final EditText txtName = new EditText(this);
    final EditText txtPoints = new EditText(this);

    LinearLayout layout = new LinearLayout(getApplicationContext());
    layout.setOrientation(LinearLayout.VERTICAL);
    layout.addView(lblName);
    layout.addView(txtName);
    layout.addView(lblPoints);
    layout.addView(txtPoints);

    dmAvarage.setView(layout);

     dmAvarage.setPositiveButton("add", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            name = txtName.getText().toString();
            String str = txtPoints.getText().toString();
            if (!number(str)) {  //function to check if string is number
                Toast.makeText(getApplicationContext(), "not number, Toast.LENGTH_LONG).show();
                return;
            }
            age = Double.parseDouble(str);

        }
    });
你能试试下面的onClick()实现吗:在代码中,onClick()实现基本上是在匿名内部类中,所以我认为这就是为什么你在那里更新的值没有反映在outerclass中,因为更新在另一个类(内部类)的范围内。请在下面的代码中尝试一次,这里我将用onClick()编写的代码提取到当前外部类范围内的一个新方法中。请再试一次,可能有用。如果出现任何故障,请告诉我,我将对其进行更多调试,以找出确切的根本原因或解决方案

     dmAvarage.setPositiveButton("add", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            initializeNameAndAge();

        }
    });



  // This method is in Main(Outer) class.   
   private void initializeNameAndAge(){
            name = txtName.getText().toString();
            String str = txtPoints.getText().toString();
            if (!number(str)) {  //function to check if string is number
                Toast.makeText(getApplicationContext(), "not number, Toast.LENGTH_LONG).show();
                return;
            }
            age = Double.parseDouble(str);
       }
看,

您在函数中使用了这两个变量,所以这两个变量的作用域都是该函数,现在您从同一个函数访问对话框,但对话框有它自己的作用域,所以它不会访问您的变量,所以这样更好


将顶部的两个变量都声明为全局变量,这样您就可以访问它并在对话框中使用。

如果回答了下面的帖子,则不适合您。请提供更完整的代码供他们检查。是。。我认为这就是问题所在,但一开始我不习惯创建全局变量,我试图创建一个函数,通过它我将访问我的变量。。正如你所看到的,它不起作用,所以我尝试了你的解决方案,我宣布它是一个全局解决方案,但不幸的是,它没有改变任何东西:(你有没有这方面的日志>我不这么认为……我如何检查它?只要运行你的应用程序,当你输入姓名或年龄并单击“确定”时,在logcat中,你会看到很多日志,你可以在那里找到是否有任何问题我只得到了以下信息:getSlotFromBufferLocked:未知缓冲区:0xAA971C30谢谢提示…我检查了你的解决方案,但我ts给我一个编译错误,因为函数无法识别我的EditText变量,所以我改进了函数,让它得到两个EditText变量,但不幸的是,它没有改变任何东西。