You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:47:26