目标 用SharedPreferences做历史数据存储时 想使存储顺序和取出数据一致.
遇到问题 在存储多个数据时想到的方式是集合,于是使用editor.putStringSet()进行存储,但是这存储的是set集合,set集合是没有顺序的
editor也没有其他集合存储方式.只能另寻办法
使用String
思路:用分割符 把每个数据练成一个长的String存储,取出时再去除分割符号
public void writeHistory(String path) {
if(TextUtils.isEmpty(path)){
return;
}
SharedPreferences save = this.getSharedPreferences("save", MODE_PRIVATE);
SharedPreferences.Editor editor = save.edit();
String keywords = save.getString("keywords","");
if(keywords!=""){
//15个字符串
String[] key = keywords.split("_",15);
if( key.length>14){
//第15个去除
keywords = keywords.replace(key[14],"");
}
//判断是否相同
for (int i = 0; i < key.length; i++) {
if(path.equals(key[i])){
keywords = keywords.replace(path+"_","");
}
}
}
editor.putStringSet()
//分隔符
editor.putString("keywords",path+"_"+keywords);
editor.putLong("keywords_bak", System.currentTimeMillis());
editor.commit();
}
这个样我们的存进去的就是 444444_333333_222222_11111_
下面去取出
ArrayList<String> readHistory() {
ArrayList<String> list = new ArrayList<>();
SharedPreferences save = this.getSharedPreferences("save", MODE_PRIVATE);
String keywords = save.getString("keywords",null);
if (null != keywords){
String[] key = keywords.split("_");
for (int i = 0; i < key.length; i++) {
list.add(key[i]);
}
}
return list;
}
取出时逐个放入arraylist
我只是一个新手,如果又不对的请在下面留言!
谢谢