PS:SharedPreferences只要稍微學過一點就會用,他本身通過創建一個Editor對象,來存儲提交,而editor可以存的格式為 他裡面可以存一個Set<String> HashSet是Java中非常常用的數據結構對象,HashSet是通過HashMap實現的,TreeSet是通過Tre ...
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] + ""); } }
結果成功取出
完