即使父 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 将无法找到计时表,并且它将始终显示空异常
我遇到了这个奇怪的问题,它一直困扰着我。我不明白为什么我在 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 将无法找到计时表,并且它将始终显示空异常