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

Android SharedPreferences失效求助:跨Activity数据读取异常

问题原因与解决方案

兄弟,你这明显是把两种数据传递/存储的方式搞混啦!

核心问题

你在ActivtiyA里是把"mana"的值存在SharedPreferences里,但在ActivtiyB中却试图从Intent的Extra参数里获取这个值——这俩是完全独立的东西,根本不互通,所以自然拿不到正确的数据。


两种解决思路,选一个适合你的:

思路1:从SharedPreferences中读取数据(如果你确实需要用SP存储)

修改ActivtiyB的代码,直接从SharedPreferences里取你存的值:

// 在ActivityB的合适位置(比如onCreate方法里)
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
// 第二个参数是默认值,当找不到"mana"键时会返回这个值
String mana = sharedPref.getString("mana", "未获取到值");
Toast.makeText(this, "mana: " + mana, Toast.LENGTH_SHORT).show();

思路2:改用Intent传递参数(如果只是跳转时临时传值)

如果你本来的需求就是跳转Activity时把数据传给ActivtiyB,那应该在ActivtiyA的跳转逻辑里把数据放到Intent中,而不是存SP:

// ActivtiyA中跳转的代码
Intent intent = new Intent(ActivtiyA.this, ActivtiyB.class);
// 把数据放入Intent的Extra
intent.putExtra("mana", "koko");
// 如果你还需要同时存到SP,保留原来的代码也没问题
PreferenceManager.getDefaultSharedPreferences(ActivtiyA.this).edit().putString("mana", "koko").apply();
startActivity(intent);

这样ActivtiyB里原来的Toast代码就能正常拿到值了。


小提醒

注意你的类名拼写:ActivtiyA/ActivtiyB应该是ActivityA/ActivityB(少了一个字母c),实际开发里这种拼写错误会导致编译报错,记得修正哦!

内容的提问来源于stack exchange,提问作者jerry fa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:12:16