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

