即使父 class 初始化了 Chronometer,它仍然是空的

Chronometer is null even though parent class initialised it

我遇到了这个奇怪的问题,它一直困扰着我。我不明白为什么我在 MainActivity 中初始化计时器时会得到这个 NullPointerException。如果我在 SecondActivity 中初始化计时器,程序运行正常。

希望有人能解决这个问题...

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Chronometer.setOnChronometerTickListener(android.widget.Chronometer$OnChronometerTickListener)' on a null object reference

-

public class MainActivity extends AppCompatActivity {

    protected Chronometer chronometer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //chronometer gets initialised here but it's still null appearantly
        chronometer = (Chronometer) findViewById(R.id.chronometer1);

        //this works
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#cd2626")));
    }
}

-

public class SecondActivity extends MainActivity {

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

         //if chronometer gets initialised again, program does work.
         //chronometer = (Chronometer) findViewById(R.id.chronometer1)
     }
}

您的计时器变量未在 MainActivity.onCreate 中初始化,因为布局仅在 SecondActivity.onCreate 中膨胀(调用 setContentView)。因此,您的 MainActivity 中的 findViewById 无效。

一般来说,我建议不要围绕 Activity 构建 class 层次结构。尝试使用其他东西,比如接口来实现你需要的东西。

包括setContentView(R.layout.main_layout);在您的主要活动中,否则 findviewbyid 将无法找到计时表,并且它将始终显示空异常