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

如何从SharedPreferences中获取JSONArray并传入Adapter

嘿,我帮你把这段存JSONArray到SharedPreferences的逻辑梳理清楚,再补上Adapter里还原的步骤,这样你就能顺畅用啦~

实现步骤:JSONArray存SharedPreferences + Adapter中还原

1. 在启动的首个Activity中存储JSONArray

SharedPreferences本身只支持存储基本数据类型和字符串,所以我们需要把JSONArray转换成字符串再存进去,代码如下:

// 获取SharedPreferences实例,文件名设为"MyData",使用私有模式(只有自己的APP能访问)
SharedPreferences sharedPrefs = getSharedPreferences("MyData", Context.MODE_PRIVATE);
// 获取SP的编辑器对象,准备修改数据
SharedPreferences.Editor editor = sharedPrefs.edit();
// 将JSONArray转为字符串,存入SP,键名设为"key_value"
editor.putString("key_value", myJsonArray.toString());
// 提交修改:推荐用apply()异步提交,不会阻塞主线程;如果需要确认提交结果可以用commit()
editor.apply();

2. 在Adapter中读取并转回JSONArray

在Adapter里我们需要先读取存储的字符串,再把它解析回JSONArray,记得要处理解析失败的异常:

// 注意:Adapter里需要拿到Context,建议从构造方法传入,避免内存泄漏
SharedPreferences sharedPrefs = context.getSharedPreferences("MyData", Context.MODE_PRIVATE);
// 读取字符串,设置默认值为空字符串,防止SP里没有对应键的情况
String jsonStr = sharedPrefs.getString("key_value", "");

JSONArray myJsonArray = null;
try {
    // 将字符串解析回JSONArray
    myJsonArray = new JSONArray(jsonStr);
    // 这里就可以操作JSONArray了,比如遍历数据填充列表项
    for (int i = 0; i < myJsonArray.length(); i++) {
        JSONObject itemObj = myJsonArray.getJSONObject(i);
        // 提取数据,比如String name = itemObj.getString("name");
    }
} catch (JSONException e) {
    // 解析失败时的处理,比如打印日志或者给用户提示
    e.printStackTrace();
}

一些小提醒

  • 尽量用apply()代替commit():apply()是异步提交,不会卡主线程,commit()是同步的,只有当你需要知道提交是否成功时才用它
  • 如果你的JSON数据比较复杂或者体积大,SharedPreferences并不是最佳选择,建议考虑用Room数据库或者本地文件存储,性能会更好
  • Adapter里用Context的时候,尽量用getApplicationContext(),避免持有Activity的强引用导致内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:20