findViewById导致NullPointerException没有明显的原因

时间:2017-09-24 21:16:15

标签: java android

我是Android开发的新手。我的应用程序编译完全正常(没有错误,没有警告),但它在启动时崩溃。我已经将崩溃的原因诊断为NullPointerException,并且我发现如果根据此声明删除TextView output = (TextView) findViewById(R.id.outputbox);以及所有行,则应用程序启动正常。我做过研究(Stack Exchange上下都有,以及大约5页的Google搜索结果),我发现的解决方案都没有,这就是我提出这个问题的原因。我在setContentView(R.layout.activity_main);之前运行了TextView output = (TextView) findViewById(R.id.outputbox);,并在activity_main.xml中声明了outputbox。这不是现有问题的重复,因为其他问题的答案并没有解决我的问题。

1 个答案:

答案 0 :(得分:0)

很可能你的变量output的声明和初始化在类中。这不会起作用。只有在调用findViewById方法后,方法setContentView才会起作用。这就是为什么你必须在类中声明你的变量,但是在onCreate方法之后立即在方法setContentView中初始化它:

public class MainActivity extends AppCompatActivity {

    TextView output;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        output = (TextView) findViewById(R.id.outputbox)
    }

}

方法findViewById在xml中搜索您的组件。为此,您必须指出此Activity将使用的xml文件。这是在setContentView(R.layout.activity_main);命令中完成的。这是一个常见的错误,所以不用担心:)