SharedPreferences的调教

本文编写于 202 天前,最后修改于 165 天前,其中某些信息可能已经过时。

最近在做“桌面”项目(奶糖桌面),在做到“隐藏APP”的时候,是把要隐藏的APP(arraylist)包名拿出来,在获取全部APP(allapplist)的时候,把获取到的包名和所有APP包名做一个比较,如果存在的话就从allapplist中移除这一项。详情可参考以下代码:

1/** 2 * +获取应用列表、隐藏应用 3 * 4 * @param context 5 */ 6 public static void initAppList(Context context) { 7 try { 8 appInfos = GetApps.GetAppList1(context); 9 ArrayList<String> arrayList = new ArrayList<String>(); 10 arrayList.clear(); 11 arrayList = SaveArrayListUtil.getSearchArrayList(context); 12 if (Build.BRAND.equals("Allwinner")) { 13 arrayList.add("com.android.settings"); 14 arrayList.add("com.android.mgs.pinyin"); 15 arrayList.add("com.duokan.einkreader"); 16 arrayList.add("com.mgs.factorytest"); 17 arrayList.add("com.softwinner.explore"); 18 } 19 Log.e("DATA_OJBK", arrayList.toString()); 20 for (int j = 0; j < arrayList.size(); j++) { 21 for (int i = 0; i < appInfos.size(); i++) { 22 if (arrayList.get(j).equals(appInfos.get(i).getPackageName())) { 23 Log.e("APPDATA-------", appInfos.get(i).getPackageName()); 24 appInfos.remove(i); 25 continue; 26 } 27 } 28 } 29 DeskTopGridViewBaseAdapter deskTopGridViewBaseAdapter = new DeskTopGridViewBaseAdapter(appInfos, 30 context); 31 mListView.setAdapter(deskTopGridViewBaseAdapter); 32 } catch (Exception e) { 33 /** 34 * 填充预设数据 35 */ 36 SharedPreferences.Editor editor = context.getSharedPreferences("info", MODE_PRIVATE).edit(); 37 editor.putString("app_hind_info", ""); 38 editor.apply(); 39 } 40 }

代码比较简单,但是实现把ArrayList存储在本地就很让我犯难,好在我逼问度娘,搜索出来了一个答案(只看得懂一半,全理解了之后会更新博客解释)。新建一个SaveArrayListUtil.java类

1/** 2 * 将arrayList的内容保存到sp里 3 */ 4 public static void saveArrayList(Context context, ArrayList searchList, String content) { 5 //searchList里“无数据” 6 if (searchList.size() == 0) { 7 //直接存 8 searchList.add(content + ""); 9 } else { 10 //searchList里“有数据” 11 //但不包含这条数据,直接在0的位置加上这条数据 12 if (!searchList.contains(content)) { 13 searchList.add(0, content + ""); 14 } else { 15 //包含了这条数据,就删除掉,并放在0位置或者原位置(自由选择)。 16 for (int i = 0; i < searchList.size(); i++) { 17 if (searchList.get(i).equals(content)) { 18 searchList.remove(i); 19 searchList.add(0, content + "");//0或者i均可。 20 } 21 } 22 } 23 } 24 //定义SP.Editor和文件名称 25 SharedPreferences.Editor editor = context.getSharedPreferences( 26 "SearchDataList", context.MODE_PRIVATE).edit(); 27 //将结果放入文件,关键是把集合大小放入,为了后面的取出判断大小。 28 editor.putInt("searchNums", searchList.size()); 29 for (int i = 0; i < searchList.size(); i++) { 30 //用条目+i,代表键,解决键的问题,也方便等一下取出,值也对应。 31 editor.putString("item_" + i, searchList.get(i) + ""); 32 } 33 editor.commit(); 34 } 35 36 /** 37 * 读取sp里的数组 38 */ 39 public static ArrayList<String> getSearchArrayList(Context context) { 40 //先定位到文件 41 SharedPreferences preferDataList = context.getSharedPreferences( 42 "SearchDataList", context.MODE_PRIVATE); 43 //定义一个集合等下返回结果 44 ArrayList<String> list = new ArrayList<>(); 45 //刚才存的大小此时派上用场了 46 int searchNums = preferDataList.getInt("searchNums", 0); 47 //根据键获取到值。 48 for (int i = 0; i < searchNums; i++) { 49 String searchItem = preferDataList.getString("item_" + i, null); 50 //放入新集合并返回 51 list.add(searchItem); 52 } 53 return list; 54 }

那么在需要的地方,调用方法参考如下:

1SaveArrayListUtil.saveArrayList(MainActivity.this, arrayList, "start");//存储arraylist在本地 2arrayList = SaveArrayListUtil.getSearchArrayList(context);//从本地存储中取出arraylist
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

sql注入

反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

SharedPreferences的调教 - HelloWorld