前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SharedPreferences 存List集合,模拟数据库,随时存取

SharedPreferences 存List集合,模拟数据库,随时存取

作者头像
cMusketeer
发布2018-03-28 10:52:31
1.4K0
发布2018-03-28 10:52:31
举报

PS:SharedPreferences只要稍微学过一点就会用,他本身通过创建一个Editor对象,来存储提交,而editor可以存的格式为

他里面可以存一个Set<String> 

Set<String> list=new HashSet<>();
            list.add("111"); 
            list.add("111");
            editor.putStringSet(keyStr,list);

HashSet是Java中非常常用的数据结构对象,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key 。这里有hashset百度百科,不懂的可以看看https://baike.baidu.com/item/HashSet/8887897?fr=aladdin

Set也是一个集合,但是该集合不能存重复的值,不像list集合那样常用,但是SP只能存放Set,不能直接存放List,但是我们可以把他转换成字符串,读取的时候把字符串再转变成List就可以,我之前参加国赛的时候,就会用到很多数据,之前都是写SQLite,但是SQLite不是很好管理,而且,存的东西非常少的时候,再写SQLite就感觉到没必要了,所以,就写了这样一个转换类。

  • 写入:字符串-->List集合
  • 读取:List集合-->字符串  

1:我写的是List<Object[]> ,只要是该形式,Object的长度是多少都行。(当然不能超过限制)

package day1.cn.ceshi001;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by liuzhitong on 2017/6/6.
 *
 * @Author : liuzhitong
 * @Description :
 */

public class ListOrStrTools {
    public Context context;
    public String spStr,keyStr;
    private final SharedPreferences sp1;
    private Object[] obj;

    public ListOrStrTools(Context context, String spStr, String keyStr) {
        this.context = context;
        this.spStr = spStr;
        this.keyStr = keyStr;
        sp1 = context.getSharedPreferences(spStr,0);
    }

    public void setData(List<Object[]> lis){

        //存入之前要先把之前的数据拿出来
        String str="";
        String s=sp1.getString(keyStr,"404");
        if(s.equals("404")){
            Log.e("sp添加出错","404");
        }
        else{str+=s;}
        if(lis.size()==0){
            Log.e("sp----lis","0");
        }
        //转换List集合---->字符串
        else{
            for(int i=0;i<lis.size();i++){
                //检测list<Object[]>中的object对象的长度
                for(int j=0;j<lis.get(i).length;j++){
                    str+=lis.get(i)[j]+"[&]";
                }

                str+="[^]";
            }
            SharedPreferences.Editor editor=sp1.edit();
            editor.putString(keyStr,str);

            editor.commit();
        }
    }

    public List<Object[]> getData(){
        List<Object[]> li1=new ArrayList<>();

        String s=sp1.getString(keyStr,"404");
        if(s.equals("404")){
            Log.e("读取出错","404");
            return li1;
        }
        //字符串---->List集合
        else{
            String data1[]=s.split("\\[\\^\\]");
            for(int i=0;i<data1.length;i++){
                String da1[]=data1[i].split("\\[\\&\\]");
                int num=da1.length;
                    obj = new Object[num];
                for(int j=0;j<num;j++){
                    obj[j]=da1[j];
                }
                li1.add(obj);
            }
            return li1;
        }


    }
}

2:调用该类

ListOrStrTools listOrStrTools = new ListOrStrTools(this, "info", "li1");//参数分别是:this(本类上下文),模拟数据库名字,表名。想当于

sp1 = context.getSharedPreferences(spStr,0);

 List<Object[]> li = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            objects = new Object[4];
            objects[0] = i;
            objects[1] = "11";
            objects[2] = "22";
            objects[3] = "333";
            li.add(objects);
        }

        ListOrStrTools listOrStrTools = new ListOrStrTools(this, "info", "li1");
        listOrStrTools.setData(li);
        List<Object[]> list1 = listOrStrTools.getData();//取出数据,并返回一个list集合。
        Log.e("ssss", list1.get(0)[3] + "");
        for (int i = 0; i < list1.size(); i++) {//打印存入的集合
            for (int j = 0; j < list1.get(i).length; j++) {
                Log.e("sss", list1.get(i)[j] + "");
            }
        }

结果成功取出

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1:我写的是List<Object[]> ,只要是该形式,Object的长度是多少都行。(当然不能超过限制)
  • 2:调用该类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档