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

Android SharedPref仅jsonArray_Score_Correct_book无法持久化值求助

问题诊断与解决方案

1. 核对写入逻辑的正确性

  • 确认两个数组的写入键名完全一致,包括大小写、拼写、无多余空格。比如写入时用jsonArray_Score_Correct_book,读取时不能写成jsonArray_Score_Correct_Book或jsonArray_Score_Correct_books。
  • 确保写入时是一次性提交所有修改,而非分开提交。正确写法示例:
// 获取Editor实例
SharedPreferences.Editor editor = getSharedPreferences("ScorePrefs", MODE_PRIVATE).edit();
// 存入两个JSONArray的字符串形式
editor.putString("jsonArray_Score_Correct_book", jsonArray_Score_Correct_book.toString());
editor.putString("jsonArray_Score_Correct_type", jsonArray_Score_Correct_type.toString());
// 提交修改(apply异步,commit同步,二选一)
editor.apply();
  • 写入前再次打印jsonArray_Score_Correct_book.toString(),确认数组内容未被意外清空或篡改。

2. 检查读取逻辑的细节

  • 读取时的键名必须和写入时完全匹配,同时打印原始字符串值排查问题:
SharedPreferences prefs = getSharedPreferences("ScorePrefs", MODE_PRIVATE);
// 获取原始字符串,默认值设为[]
String bookRawJson = prefs.getString("jsonArray_Score_Correct_book", "[]");
Log.d("DebugTag", "Book数组原始JSON: " + bookRawJson);
try {
    JSONArray bookArray = new JSONArray(bookRawJson);
} catch (JSONException e) {
    e.printStackTrace();
}

如果打印的bookRawJson就是[],说明SharedPreferences里根本没存上对应值;如果是有效JSON但解析报错,再针对性处理异常。

3. 统一SharedPreferences实例

  • 确保所有页面读写用的是同一个SharedPreferences文件名,比如Activity1和Activity2都用ScorePrefs,不要出现文件名拼写差异。
  • 统一使用getApplicationContext()获取SharedPreferences实例,避免不同Context导致的实例不一致问题。

4. 极端场景排查

  • 检查设备存储空间是否充足,存储空间不足会导致SharedPreferences写入失败。
  • 清除APP缓存后重新测试,避免旧缓存数据干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:33:16