Android Java中如何结合静态变量正确使用onResume方法
问题分析与解决方案
核心问题原因
你的错误栈明确显示,空指针发生在KatefthinsiActivity的onCreate方法调用getWidgets时,而Android Activity的生命周期顺序是:onCreate → onStart → onResume。也就是说,onResume里的null判断代码是在onCreate执行完之后才会运行的,所以当onCreate里遍历katefthinseisTomeis时,数组已经是null,直接触发了空指针,而onResume的拦截逻辑根本没机会执行。
和super.onResume()的调用顺序无关——在重写onResume时,必须先调用super.onResume(),这是符合Android开发规范的正确写法,你的onResume方法本身写法没问题,只是时机不对。
修复方案
方案1:提前拦截到onCreate阶段
在onCreate调用getWidgets之前就做null判断,并且跳转后要调用finish()终止当前Activity,避免后续代码继续执行:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); if (katefthinseisTomeis == null) { changeActivity(this, LauncherActivity.class, R.anim.slide_in_left, R.anim.slide_out_right); finish(); // 必须调用,否则当前Activity会继续执行getWidgets() return; } getWidgets(); // 这里再调用就不会有问题了 }
方案2:在使用数组的地方增加空保护
在getWidgets方法的for循环前加null判断,避免直接遍历null数组:
private void getWidgets() { if (katefthinseisTomeis == null) { // 可以选择跳转、提示用户或者初始化空数组 changeActivity(this, LauncherActivity.class, R.anim.slide_in_left, R.anim.slide_out_right); finish(); return; } for (String s: katefthinseisTomeis) { // 你的遍历逻辑 } }
方案3:替换静态变量为Intent传递数据
静态变量容易因为系统回收进程导致null,更可靠的方式是通过Intent传递数组:
- 在LauncherActivity跳转时:
Intent intent = new Intent(this, KatefthinsiActivity.class); intent.putExtra("katefthinseisTomeis", katefthinseisTomeis); startActivity(intent); overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
- 在KatefthinsiActivity的
onCreate中接收:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); String[] katefthinseisTomeis = getIntent().getStringArrayExtra("katefthinseisTomeis"); if (katefthinseisTomeis == null) { changeActivity(this, LauncherActivity.class, R.anim.slide_in_left, R.anim.slide_out_right); finish(); return; } // 使用数组进行后续逻辑 }
内容的提问来源于stack exchange,提问作者Thalis
相关产品推荐
相关产品推荐

