Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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
Android 内部类中的最终变量问题_Android_Null - Fatal编程技术网

Android 内部类中的最终变量问题

Android 内部类中的最终变量问题,android,null,Android,Null,你能告诉我这里的错误是什么吗?它告诉我吐司制作中的“性别”必须设置为final,但当我设置为final时,if语句抱怨它不应该是final @Override protected void onCreate(Bundle savedInstanceState) { String gender = null; Toast.makeText(this, R.string.ok, Toast.LENGTH_LONG).show(); super.onCreate(savedInst

你能告诉我这里的错误是什么吗?它告诉我吐司制作中的“性别”必须设置为final,但当我设置为final时,if语句抱怨它不应该是final

@Override
protected void onCreate(Bundle savedInstanceState) {

    String gender = null;

    Toast.makeText(this, R.string.ok, Toast.LENGTH_LONG).show();
super.onCreate(savedInstanceState);
setContentView(R.layout.createprofile);



    RadioButton rb_male = (RadioButton) findViewById(R.id.maleradiobutton);
String   male=rb_male.getText().toString();

    RadioButton rb_female = (RadioButton) findViewById(R.id.femaleradiobutton);
    String female=rb_male.getText().toString();

    if(rb_male.isChecked()) { gender = "male";}
    if(rb_female.isChecked()){ gender = "female";}

    Button checkgender = (Button) findViewById(R.id.gendercheck);
    checkgender.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG);
        }
    });




}




}
错误是:

Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG);
应该是

Toast.makeText(v.getContext(), gender.toString(), Toast.LENGTH_LONG).show();
您还可以将性别设置为类范围变量,以便使用setter/getter访问它。错误为:

Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG);
应该是

Toast.makeText(v.getContext(), gender.toString(), Toast.LENGTH_LONG).show();
您还可以将性别设置为类作用域变量,以便可以使用setter/getter访问该变量

      public void onClick(View v) {

                    Toast.makeText(ProfileActivity.this, gender.toString(), 
Toast.LENGTH_LONG).show();
                }
            });
onclick toast中缺少您的.show():

      public void onClick(View v) {

                    Toast.makeText(ProfileActivity.this, gender.toString(), 
Toast.LENGTH_LONG).show();
                }
            });

无法从内部类访问局部非最终变量。一个简单的解决方法是在设置性别的初始值后,使用另一个最终变量。这样做:

if(rb_male.isChecked()) { gender = "male";}
if(rb_female.isChecked()){ gender = "female";}
final String finalGender = gender;
后来

Toast.makeText(ProfileActivity.this, finalGender.toString(), Toast.LENGTH_LONG).show();

还有其他方法,但这是最快的。

您不能从内部类访问局部非最终变量。一个简单的解决方法是在设置性别的初始值后,使用另一个最终变量。这样做:

if(rb_male.isChecked()) { gender = "male";}
if(rb_female.isChecked()){ gender = "female";}
final String finalGender = gender;
后来

Toast.makeText(ProfileActivity.this, finalGender.toString(), Toast.LENGTH_LONG).show();

还有其他方法,但这是最快的。

你有太多的错误,无法完全解决。这些措施包括:

  • 你从按钮抓取文本到变量中,然后写出文字字符串“男性”和“女性”
  • 您从男性按钮抓取了两次文本,而从未从女性按钮抓取过文本
  • 在类中声明变量,而不是在onCreate方法中声明变量,这样它们的行为会更好,不会出现关于是否为final等问题
  • 检查阳性和阴性按钮的
    if
    语句必须位于方法onClick(v)内。如果它们在外部,那么单击并不会导致重新评估它们,并且对按钮的任何更改都不会改变您得到的结果
  • gender
    已经是一个字符串,
    gender.toString()
    不做任何更改
  • RadioButton并不是你想要的,你可能想要切换按钮
  • 您可能希望加入一些逻辑,以便一次只能检查一个按钮(男按钮或女按钮)。他们每个人都需要一个onclick监听器来完成这项工作 说了这么多,下面是代码,其中有很多更改,可能还有一些其他的东西被清理了一下

    祝你好运

    公共类AndroidTest扩展活动{

       String gender = null;
       RadioButton rb_male;
       RadioButton rb_female;
       Button checkgender;
    
       @Override
       protected void onCreate(Bundle savedInstanceState) {
    
           Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
    
           rb_male = (RadioButton) findViewById(R.id.maleradiobutton);
           rb_female = (RadioButton) findViewById(R.id.femaleradiobutton);
    
           checkgender = (Button) findViewById(R.id.gendercheck);
           checkgender.setOnClickListener(new View.OnClickListener() {
    
               public void onClick(View v) {
                   if (rb_male.isChecked()) {
                       gender = "male";
                   }
                   if (rb_female.isChecked()) {
                       gender = "female";
                   }
                   Toast.makeText(AndroidTest.this, (CharSequence) gender, Toast.LENGTH_LONG).show();
               }
           });
       }
    

    }

    您的错误太多,无法完全解决。这些措施包括:

  • 你从按钮抓取文本到变量中,然后写出文字字符串“男性”和“女性”
  • 您从男性按钮抓取了两次文本,而从未从女性按钮抓取过文本
  • 在类中声明变量,而不是在onCreate方法中声明变量,这样它们的行为会更好,不会出现关于是否为final等问题
  • 检查阳性和阴性按钮的
    if
    语句必须位于方法onClick(v)内。如果它们在外部,那么单击并不会导致重新评估它们,并且对按钮的任何更改都不会改变您得到的结果
  • gender
    已经是一个字符串,
    gender.toString()
    不做任何更改
  • RadioButton并不是你想要的,你可能想要切换按钮
  • 您可能希望加入一些逻辑,以便一次只能检查一个按钮(男按钮或女按钮)。他们每个人都需要一个onclick监听器来完成这项工作 说了这么多,下面是代码,其中有很多更改,可能还有一些其他的东西被清理了一下

    祝你好运

    公共类AndroidTest扩展活动{

       String gender = null;
       RadioButton rb_male;
       RadioButton rb_female;
       Button checkgender;
    
       @Override
       protected void onCreate(Bundle savedInstanceState) {
    
           Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
    
           rb_male = (RadioButton) findViewById(R.id.maleradiobutton);
           rb_female = (RadioButton) findViewById(R.id.femaleradiobutton);
    
           checkgender = (Button) findViewById(R.id.gendercheck);
           checkgender.setOnClickListener(new View.OnClickListener() {
    
               public void onClick(View v) {
                   if (rb_male.isChecked()) {
                       gender = "male";
                   }
                   if (rb_female.isChecked()) {
                       gender = "female";
                   }
                   Toast.makeText(AndroidTest.this, (CharSequence) gender, Toast.LENGTH_LONG).show();
               }
           });
       }
    

    }

    它仍然会给我同样的错误,基本上您所做的是添加.show(),但我的问题与GUI无关。。这是关于变量genderIt的定义,它仍然给我同样的错误,基本上你所做的是添加.show(),但我的问题与GUI无关。。这是关于变量genderIt的定义,它仍然给我同样的错误,基本上你所做的是添加.show(),但我的问题与GUI无关。。这是关于变量genderIt的定义,它仍然给我同样的错误,基本上你所做的是添加.show(),但我的问题与GUI无关。。这是关于变量性别的定义,小修正,非最终局部变量(在方法中定义)。可以访问非最终实例变量。谢谢,它运行了,但是toast一直在给我“男性”这个词!你能更正一下吗?因为我还是看不出错误。我提供的代码是正确的。如果总是得到“male”,则表示rb_male.isChecked()总是返回true。要确保这一点,只需在使用log.d设置后记录值(“CheckGender”,“Gender is”+Gender);消息将在LogCat控制台中打印。我使用性别或最终性别进行日志记录(当我使用性别进行日志记录时,会给出最终错误)?小修正,非最终局部变量(在方法中定义)。可以访问非最终实例变量。谢谢,它运行了,但是toast一直在给我“男性”这个词!你能更正一下吗?因为我还是看不出错误。我提供的代码是正确的。如果总是得到“male”,则表示rb_male.isChecked()总是返回true。要确保这一点,只需在使用log.d设置后记录值(“CheckGender”,“Gender is”+Gender);消息将在LogCat控制台中打印。我使用性别或最终性别进行日志记录(使用性别进行日志记录时,会给出最终错误)?