如何从SharedPreferences中获取JSONArray并传入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
相关产品推荐
相关产品推荐

