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

跨Activity传值用于IF语句失效及SharedPreferences数据加载异常解决

问题分析与解决方案

看起来你遇到的核心问题是从StartActivity传递的data1参数在MainActivity中没被正确接收,导致data1 == 1的分支无法执行。我帮你梳理几个最可能的原因和对应的修复方案:

1. 传递与接收的Key不匹配

你在StartActivity里用字符串"EXTRA_DATA"作为key传值,但在MainActivity中尝试用StartActivity.EXTRA_DATA来接收。如果你的StartActivity里没定义这个静态常量,那这个key其实是无效的,会直接返回默认值0。

修复方案:

在StartActivity中定义一个公开的静态常量作为统一key:

public static final String EXTRA_DATA = "EXTRA_DATA";

然后传值时也用这个常量:

intent.putExtra(StartActivity.EXTRA_DATA, data1);

这样两边的key完全一致,就不会出现匹配失败的情况了。

2. 获取Intent的时机不对

你代码里Intent intentTest = getIntent();的位置如果不在onCreate()方法内(或者没在Activity初始化阶段调用),可能会拿到错误的Intent实例,导致取不到传递的参数。

修复方案:

把获取Intent的代码放在MainActivity的onCreate()里,并且放在视图初始化之后、分支判断之前:

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

    // 先完成视图初始化
    countLabel = findViewById(R.id.countLabel);
    questionLabel = findViewById(R.id.questionLabel);
    answerBtn1 = findViewById(R.id.answerBtn1);
    // ... 其他按钮初始化

    // 再获取传递的参数
    Intent intentTest = getIntent();
    int data1 = intentTest.getIntExtra(StartActivity.EXTRA_DATA, 0);

    // 最后执行分支判断逻辑
    if (data1 == 1) {
        // qDB1的处理逻辑
        for (String[] quizDatum : qDB1) {
            ArrayList<String> tmpArray = new ArrayList<>();
            tmpArray.add(quizDatum[0]);
            tmpArray.add(quizDatum[1]);
            tmpArray.add(quizDatum[2]);
            tmpArray.add(quizDatum[3]);
            tmpArray.add(quizDatum[4]);
            questionArray1.add(tmpArray);
        }
        showNextQuiz();
    } else {
        // qDB2的处理逻辑
        for (String[] quizDatum : qDB2) {
            ArrayList<String> tmpArray = new ArrayList<>();
            tmpArray.add(quizDatum[0]);
            tmpArray.add(quizDatum[1]);
            tmpArray.add(quizDatum[2]);
            tmpArray.add(quizDatum[3]);
            tmpArray.add(quizDatum[4]);
            questionArray1.add(tmpArray);
        }
        showNextQuiz();
    }
}

3. 额外排查:确认Intent未被覆盖

如果MainActivity有其他启动方式(比如从其他Activity启动、Manifest中设置了特殊launchMode导致实例复用),可能会拿到错误的Intent。你可以加个日志确认接收到的数值:

int data1 = intentTest.getIntExtra(StartActivity.EXTRA_DATA, 0);
Log.d("MainActivity", "接收到的data1值:" + data1);

通过日志能直观看到数值,进一步定位问题。

按上面的步骤排查,应该就能解决分支不执行的问题了。

内容的提问来源于stack exchange,提问作者K Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:42:32