应用程序在运行时崩溃

时间:2016-06-15 18:47:33

标签: java android

我没有收到任何错误,但是当我运行应用程序时它会崩溃:

 public class MainActivity extends AppCompatActivity {
    ImageButton Nr1 = (ImageButton) findViewById(R.id.ImageButton1);
    public void machwas(View v) {
        Nr1.setImageResource(R.drawable.x);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

3 个答案:

答案 0 :(得分:1)

您必须在创建视图后调用findViewById。

public class MainActivity extends AppCompatActivity {

ImageButton Nr1 ;


public  void machwas(View v){
    Nr1.setImageResource(R.drawable.x);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Nr1 = (ImageButton)findViewById(R.id.ImageButton1);
    machwas(0);
}
}

答案 1 :(得分:1)

findViewById()搜索由setContentView()设置的视图。在您的代码findViewById()之前调用onCreate(),因此尚未设置任何视图,并且由于所有查找都将失败,您将始终获得null

BTW:考虑使用像ButterKnife这样的帮手

答案 2 :(得分:0)

这是错误的:

public class MainActivity extends AppCompatActivity {
    ImageButton Nr1 = (ImageButton)findViewById(R.id.ImageButton1);

因为findViewById()应该在onCreate方法中调用,原因是之后布局膨胀并且您已准备好获取视图并初始化小部件...

所以你正在做的是错误地初始化ImageButton,可能在该行之后为null然后在这里

public  void machwas(View v){
        Nr1.setImageResource(R.drawable.x);
    }

将以NullPointer异常爆炸......

但这只是一个推断,因为你不发布LogCat ......

有关详细信息,请查看活动生命周期和Official Android Documentation

enter image description here