Java findViewById会导致无明显原因的NullPointerException

Java findViewById会导致无明显原因的NullPointerException,java,android,Java,Android,我是Android开发新手。我的应用程序编译得非常好,没有错误,没有警告,但在启动时崩溃。我已经诊断出崩溃的原因是NullPointerException,我发现如果我删除TextView output=TextView findViewByIdR.id.outputbox;除了所有依赖于此声明的行之外,该应用程序也可以正常启动。我做了关于栈内和栈外交换的研究,以及大约5页的谷歌搜索结果,但我发现没有一个解决方案有效,这就是为什么我要问这个问题。我已经运行了setContentViewR.lay

我是Android开发新手。我的应用程序编译得非常好,没有错误,没有警告,但在启动时崩溃。我已经诊断出崩溃的原因是NullPointerException,我发现如果我删除TextView output=TextView findViewByIdR.id.outputbox;除了所有依赖于此声明的行之外,该应用程序也可以正常启动。我做了关于栈内和栈外交换的研究,以及大约5页的谷歌搜索结果,但我发现没有一个解决方案有效,这就是为什么我要问这个问题。我已经运行了setContentViewR.layout.activity\u main;TextView输出之前=TextView findViewByIdR.id.outputbox;outputbox在activity_main.xml中声明。这不是现有问题的重复,因为其他问题的答案没有解决我的问题。

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


findViewById方法在xml中搜索组件。要使其工作,您必须指出此活动将使用什么xml文件。这是在setContentViewR.layout.activity_main中完成的;命令这是一个常见的错误,因此无需担心:

发布您的.xml和活动代码。发布您的.xml代码对于任何给定场景,您很少会找到现成的解决方案。关键是理解问题并调整解决方案。您似乎误解了运行时异常和编译错误之间的区别。我的声明和初始化都在类中,在同一行,但在方法之后。为什么这不起作用呢?类中变量的声明和初始化发生在调用任何方法之前。因此,初始化将是在类中运行的第一个代码。了解活动生命周期-当活动在屏幕上可视化时,调用onCreate方法,然后findViewById方法将工作。永远不要在类中使用findViewById,只在onCreate之后调用的方法中使用:我将尽快了解活动生命周期。谢谢你的帮助。
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)
    }

}