Android 使用单选按钮更改视图可见性时的NPE

Android 使用单选按钮更改视图可见性时的NPE,android,Android,我试图通过单击单选按钮来更改视图的可见性和编辑文本,但它不起作用。问题是java空指针。我怎样才能修好它?我验证了所有变量都是正确的 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(

我试图通过单击单选按钮来更改视图的可见性和编辑文本,但它不起作用。问题是java空指针。我怎样才能修好它?我验证了所有变量都是正确的

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    View rad1 = (RadioButton)findViewById(R.id.radio1);
    View rad2 = (RadioButton)findViewById(R.id.radio2);



    final View test = findViewById(R.id.ProvencePrefecureView);
    final EditText  test1 = (EditText) findViewById(R.id.ProvencePrefecureEdit);
    final View test2 = findViewById(R.id.rg);
    final View  test3 = (EditText) findViewById(R.id.Commune_arrondView);
    final EditText  test4 = (EditText) findViewById(R.id.Commune_arrondEdit);

    public void onRadioButtonClicked(View view)  {
        // Is the button now checked?
        boolean checked = ((RadioButton) view).isChecked();

        // Check which radio button was clicked
        switch(view.getId()) {
            case R.id.radio1:
                if (checked)
                    test.setVisibility(1);
                test1.setVisibility(1);
                test3.setVisibility(1);
                test4.setVisibility(1);
                break;
            case R.id.radio2:
                if (checked)
                    break;
        }
    }
}
XML:


Java中的所有代码都必须在一个方法中。试试这个:

final View rad1;
final View rad2;

final View test;
final EditText;
final View test2;
final View  test3;
final EditText  test4;


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    rad1 = (RadioButton)findViewById(R.id.radio1);
    rad2 = (RadioButton)findViewById(R.id.radio2);

    test = findViewById(R.id.ProvencePrefecureView);
    test1 = (EditText) findViewById(R.id.ProvencePrefecureEdit);
    test2 = findViewById(R.id.rg);
    test3 = (EditText) findViewById(R.id.Commune_arrondView);
    test4 = (EditText) findViewById(R.id.Commune_arrondEdit);

}

发布您的整个错误您必须定义这些测试、测试1、测试3和测试4视图最终以在onRadioButtonClicked方法中达到它们。帮你自己一个忙,在onRadioButtonClicked方法上调试。然后共享完整的活动代码。该错误NullPointerException包含堆栈跟踪,在某个点上会包含对源代码中特定行的引用。转到该行,找出不应该为空的
null
,然后修复它。如果无法修复,请确切地告诉我们是哪一行导致了问题。为什么所有代码都要在方法之外设置对布局对象的引用?它永远不会执行。我试过这个,但没用!在方法onRadioButtonClicked(视图视图)中未检测到变量testx。问题发生在视图rad1=(RadioButton)findViewById(R.id.radio1)中;但这是正确的!!请了解
范围
。将变量声明为类字段,并在onCreate()中初始化它们。您应该先尝试一些基本的Java教程,然后学习Android。我已经编辑了我的答案。非常感谢Simon,我会像你说的那样了解范围,但首先我必须完成我正在处理的应用程序。再次感谢
final View rad1;
final View rad2;

final View test;
final EditText;
final View test2;
final View  test3;
final EditText  test4;


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    rad1 = (RadioButton)findViewById(R.id.radio1);
    rad2 = (RadioButton)findViewById(R.id.radio2);

    test = findViewById(R.id.ProvencePrefecureView);
    test1 = (EditText) findViewById(R.id.ProvencePrefecureEdit);
    test2 = findViewById(R.id.rg);
    test3 = (EditText) findViewById(R.id.Commune_arrondView);
    test4 = (EditText) findViewById(R.id.Commune_arrondEdit);

}