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
相关产品推荐
相关产品推荐

