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

Android中SharedPreferences跨Activity共享int变量失败求助

解决SharedPreferences获取值为0的问题

嘿,我帮你排查下代码里的问题,核心是SharedPreferences的文件名和键名没有统一匹配,导致第二个Activity读不到正确的值,具体问题和修复方案如下:

问题分析

你代码里有两个关键不匹配的地方:

  1. SharedPreferences文件名不一致:第一个Activity用valsat变量作为文件名,但第二个Activity用字符串"valsat"获取,而且你在第二个Activity里把valsat定义成了int类型的0,这完全不是同一个名称;
  2. 存储/读取的键名不匹配:第一个Activity用valsat作为putInt的键,第二个Activity用"valsat"作为getInt的键,同样不对应。

这两个不匹配导致第二个Activity找不到你存储的数据,只能返回默认值0。

修复方案

我们需要统一SharedPreferences的文件名和键名,最好用字符串常量来避免拼写错误,以下是修正后的代码:

第一个Activity(存储数据)

// 定义统一的常量,建议放在一个公共类里,或者两个Activity都复制这段常量定义
private static final String PREF_FILE_NAME = "SatValuesPrefs";
private static final String KEY_SAT_VALUE = "sat_value_key";

// 存储逻辑
TextView valsat2 = findViewById(R.id.valsatu);
SharedPreferences sharedpreferences = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();

// 建议加个异常处理,防止输入不是整数的情况
try {
    int n = Integer.parseInt(valsat2.getText().toString());
    editor.putInt(KEY_SAT_VALUE, n);
    editor.apply(); // 用apply()代替commit(),异步提交更高效,不阻塞主线程
} catch (NumberFormatException e) {
    // 处理输入不是整数的情况,比如提示用户
    e.printStackTrace();
}

第二个Activity(读取数据)

// 和第一个Activity用完全相同的常量
private static final String PREF_FILE_NAME = "SatValuesPrefs";
private static final String KEY_SAT_VALUE = "sat_value_key";

// 读取逻辑
TextView sat = findViewById(R.id.valoresaturazione);
SharedPreferences sharedpreferences = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
// 第二个参数是默认值,当找不到对应键时返回0
int valsatn = sharedpreferences.getInt(KEY_SAT_VALUE, 0);
sat.setText(String.valueOf(valsatn));

额外注意事项

  • 尽量把常量放在一个公共的工具类里(比如AppConstants.java),这样两个Activity直接引用,避免重复定义和拼写错误;
  • 处理Integer.parseInt的异常,防止用户输入非整数内容导致崩溃;
  • 优先使用apply()代替commit(),commit()是同步提交,在主线程会有性能问题,apply()是异步的,更适合大多数场景。

内容的提问来源于stack exchange,提问作者Marco Giglio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:30