Android:列表数据在SharedPreferences中的存储与读取

需积分: 12 3 下载量 44 浏览量 更新于2024-09-09 收藏 1KB TXT 举报
本文将详细介绍如何在Android应用中使用SharedPreferences来存储和读取List数据。提供的代码示例展示了两个关键函数:一个用于保存List到SharedPreferences,另一个用于从SharedPreferences中加载List。 在Android开发中,SharedPreferences通常用于存储轻量级、简单的用户配置或应用数据。虽然它不直接支持List类型的存储,但可以通过一些技巧来实现。这里,我们看到一个例子,展示了如何将一个List转换成适合SharedPreferences格式的数据,并在需要时恢复这个List。 首先,让我们看看保存List的函数`saveArray()`: ```java public boolean saveArray() { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); Editor mEdit1 = sp.edit(); // 保存List的大小 mEdit1.putInt("Status_size", mSpareList.size()); // 遍历List,将每个元素存为键值对,键由索引和固定前缀组成 for (int i = 0; i < mSpareList.size(); i++) { mEdit1.remove("Status_" + i); mEdit1.putString("Status_" + i, mSpareList.get(i)); } // 提交更改 return mEdit1.commit(); } ``` 在这个函数中,首先获取SharedPreferences的实例,然后创建一个编辑器对象。接着,将List的大小存储为一个整数键值对,键是"Status_size"。然后,遍历List,为每个元素创建一个键值对,键是"Status_"加上元素的索引,值就是List中的实际元素。最后,通过调用`commit()`方法提交这些更改。 接下来,是读取List的函数`loadArray()`: ```java public void loadArray(Context mContext) { SharedPreferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(mContext); // 获取保存的List大小 int size = mSharedPreference1.getInt("Status_size", 0); // 创建一个新的List来存放读取的数据 for (int i = 0; i < size; i++) { // 从SharedPreferences中获取键值对,然后进行处理 String smsString = mSharedPreference1.getString("Status_" + i, null); // 假设每个元素都是一个特定格式的字符串,例如"名字|日期|正文|类型" String[] smsStrings = smsString.split("duanxiaobo"); SmsInfo smsInfo = new SmsInfo(); // 将分割后的字符串分别赋值给SmsInfo对象的属性 smsInfo.name = smsStrings[0]; smsInfo.data = smsStrings[1]; smsInfo.body = smsStrings[2]; smsInfo.type = Integer.parseInt(smsStrings[3]); // 将处理后的SmsInfo对象添加到新的List中 mSharedSmsList.add(smsInfo); } // 打印调试信息 Log.i("wwwwwwwwwwww", mSharedPreference1.getString("Status_" + i, null)); } ``` 这个函数首先获取SharedPreferences实例,然后读取之前保存的"Status_size",得到List的大小。然后,遍历这个范围,从SharedPreferences中取出每个键值对,使用`split()`方法按特定分隔符(这里是"duanxiaobo")拆分字符串,将结果分配给自定义类SmsInfo的对象。最后,将这些对象添加到新的List中。 总结来说,这个例子展示了如何通过SharedPreferences在Android应用中存储和恢复List数据。需要注意的是,这种方法适用于数据结构相对简单且元素可以序列化为字符串的情况。对于更复杂的数据结构,可能需要考虑使用其他持久化存储机制,如SQLite数据库或Gson库来序列化和反序列化对象。