有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 java。使用findViewById初始化对象后直接执行lang.NullPointerException

这是一个奇怪的崩溃,因为该应用程序在5-6部Android测试手机上测试并发现运行平稳(没有任何错误),但Play store报告在大约2%的会话中出现崩溃,这太高了(谷歌接受的最大值为1.09%)

NullPointerException发生在应用程序的许多地方,没有任何逻辑原因,因为所有对象都是在类级别声明的,并且在onCreate开始时已初始化:

这只是其中一个例子:

btn_display_mode = findViewById(R.id.btn_display_mode);

.
.
(some code in the same class_
.
.
btn_display_mode.setOnClickListener(new View.OnClickListener() {    <---- java.lang.NullPointerException
    @Override
    public void onClick(View view) {
        updateDisplayMode(displayMode);
    }
});

这里是另一个同样错误的地方:

       mAdView = findViewById(R.id.adView);
       adRequest = new AdRequest.Builder().build();
       mAdView.loadAd(adRequest);                    <---- java.lang.NullPointerException



共 (2) 个答案

  1. # 1 楼答案

    请像这样尝试:

    btn_display_mode = (Button)findViewById(R.id.btn_display_mode);

  2. # 2 楼答案

    多亏了格雷格

    出现问题的原因是,我决定让应用程序只以纵向运行,并在“onResume”中添加了以下几行,而不是“onCreate”

           //          - USE FULL SCREEN & KEEP SCREEN ON             
            WindowManager.LayoutParams params = this.getWindow().getAttributes();
            params.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
    

    同时,有一个丰富的景观布局,名为“活动区(土地)”,我没有删除它,它并不包含“活动区(土地)”中包含的所有对象

    我的错误是把这两行代码放在“onResume”的开头;不是在“onCreate”的开头,所以当应用程序以横向模式启动时,它会崩溃,因为它无法在“activity_main(Land)”中找到所有对象