1.SharedPreFerences是什么

是安卓的一种最轻量的储存类,储存为xml文件储存到/data/data/包名/shared_prefs下,一般用来存储一些比较简单的数据,比如用户名姓名,密码等等

2.如何储存数据

SharedPreFerences 储存数据分为四步 
1.新建sharedPreFerences对象 
2.通过sharedPreFerences.editor()创建editor对象 
3.储存数据,通过editor.putString()、editor.putInt()方法储存,括号内是以键值对的形式存在例如editor.putString(“name”,”小明”) 
4.提交数据 editor.commit();

//sp为新建xml文件的文件名,MODE模式,PRIVATE私有SharedPreferences sharedPreferences=getSharedPreferences("sp",MODE_PRIVATE);SharedPreferences.Editor editor=sharedPreferences.edit();editor.putString("name","张三");editor.commit();

3.如何读取数据

editor提交了数据后,如果我们要访问数据,就可以通过sharedPreferences对象读取,editor
是put,sharedPreferences就是get,后面还要加上一个默认值

 SharedPreferences sharedPreferences=getSharedPreferences("sp",MODE_PRIVATE);SharedPreferences.Editor editor=sharedPreferences.edit();editor.putString("name","张三");editor.commit();sp_tv.setText(sharedPreferences.getString("name",""));

SP存储的信息是否会因为app的卸载而清空呢?
其实用 SharedPreferences  保存的数据,卸载 App 后还存在 ~
搜寻之后发现从Android 6.0开始,它可以使用allowBackup属性的boolean来进行设置:

true:数据将保存在Google云中,并在下次安装该应用程序时进行恢复
       false:数据将会在卸载app的时候同时做清空处理

<applicationandroid:allowBackup="true">
</application>

下面是sp存储的封装类

public class SPUtils {public SPUtils() {/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/*** 保存在手机里面的文件名*/public static final String FILE_NAME = "app_data";/*** 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法** @param context* @param key* @param object*/public static void put(Context context, String key, Object object) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();if (object instanceof String) {editor.putString(key, (String) object);} else if (object instanceof Integer) {editor.putInt(key, (Integer) object);} else if (object instanceof Boolean) {editor.putBoolean(key, (Boolean) object);} else if (object instanceof Float) {editor.putFloat(key, (Float) object);} else if (object instanceof Long) {editor.putLong(key, (Long) object);} else {editor.putString(key, object.toString());}SharedPreferencesCompat.apply(editor);}/*** 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值** @param context* @param key* @param defaultObject* @return*/public static Object get(Context context, String key, Object defaultObject) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);if (defaultObject instanceof String) {return sp.getString(key, (String) defaultObject);} else if (defaultObject instanceof Integer) {return sp.getInt(key, (Integer) defaultObject);} else if (defaultObject instanceof Boolean) {return sp.getBoolean(key, (Boolean) defaultObject);} else if (defaultObject instanceof Float) {return sp.getFloat(key, (Float) defaultObject);} else if (defaultObject instanceof Long) {return sp.getLong(key, (Long) defaultObject);}return null;}/*** 移除某个key值已经对应的值** @param context* @param key*/public static void remove(Context context, String key) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.remove(key);SharedPreferencesCompat.apply(editor);}/*** 清除所有数据** @param context*/public static void clear(Context context) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.clear();SharedPreferencesCompat.apply(editor);}/*** 查询某个key是否已经存在** @param context* @param key* @return*/public static boolean contains(Context context, String key) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);return sp.contains(key);}/*** 返回所有的键值对** @param context* @return*/public static Map<String, ?> getAll(Context context) {SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);return sp.getAll();}/*** 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类** @author zhy*/private static class SharedPreferencesCompat {private static final Method sApplyMethod = findApplyMethod();/*** 反射查找apply的方法** @return*/@SuppressWarnings({"unchecked", "rawtypes"})private static Method findApplyMethod() {try {Class clz = SharedPreferences.Editor.class;return clz.getMethod("apply");} catch (NoSuchMethodException e) {}return null;}/*** 如果找到则使用apply执行,否则使用commit** @param editor*/public static void apply(SharedPreferences.Editor editor) {try {if (sApplyMethod != null) {sApplyMethod.invoke(editor);return;}} catch (IllegalArgumentException e) {} catch (IllegalAccessException e) {} catch (InvocationTargetException e) {}editor.commit();}}}

使用方式:

String dateString = SpUtils.get(context, "date", "").toString();
SpUtils.put(context, "date", dateNowString);

Android初级教程 - 四大存储之SP存储相关推荐

  1. android+默认存储,Android 数据存储之SP存储,内部存储,外部存储

    Android 数据存储之SP存储,内部存储,外部存储 Android提供了多种数据存储的技术来永久的保存应用数据,以便于开发者能够根据自己的需求来选择合适的数据存储方案,主要有SharedPrefe ...

  2. Android初级教程IP拨号器初识广播接受者

    需求:输入ip号码并且保存在本地,监听打电话广播,如果电话号码以0开头,则加上ip区号拨打. 首先定义一个页面布局: <LinearLayout xmlns:android="http ...

  3. Android初级教程:RatingBar的使用

    记得淘宝里面买家给卖家评分的时候会有一个星星状的评分条,其实就是基于RatingBar做了自定义使用了.那么本篇文章就对RatingBar的使用做一个基本的认识. 接下来就是正题,那就是对于Ratin ...

  4. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  5. Android初级教程Activity小案例(计算器乘法运算)

    首先设置两个布局文件,一个布局文件进行输入数据,获取加法运算:另一个布局文件进行显示最终结果.Activity1启动Activity2,并传递计算结果值给Activity2. main.xml: &l ...

  6. Android初级教程:Android中解析方式之pull解析

    在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...

  7. Android初级教程初谈自定义view自定义属性

    有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...

  8. Android初级教程调用手机拍照与摄像功能

    这个小案例建议在手机上运行. package com.example.camera;import java.io.File;import android.net.Uri; import android ...

  9. Android初级教程短信防火墙

    如果你有女神,而且有情敌的话,你看到这篇文章会有一种窃喜的感觉. 需求:对情敌的号码进行拦截,让女神手机永远收不到它的号码. 首先定义一个广播接收者类: package com.example.sms ...

  10. Android初级教程实现电话录音

    需求:设置来电后自动录音. 首先设置一个按钮,代码很简单这里就不再给出. 建一个类,RecorderServicer extends Service package com.ydl.recorder; ...

最新文章

  1. CMakeLists.txt
  2. python_day2_数据格式
  3. 增强学习(三)----- MDP的动态规划解法
  4. Git根据commitId查看提交内容:根据commitId查看某次提交的内容
  5. 【最小生成树】路线规划(nowcoder 217603)
  6. HTML5新特征、窍门和技术(11~15)
  7. 机器学习顶刊文献_“大数据+机器学习”在光催化制氢中的研究范式
  8. 《OSPF和IS-IS详解》
  9. php对象数字属性,PHP获取对象的纯数字属性
  10. 配置项setOption -- title
  11. IE浏览器版本 - 升级与降级( IE8、 IE9 、IE10)
  12. 空间变换与计算_02_3x3矩阵
  13. 优化设计鲍威尔法c语言,机械优化设计鲍威尔法编程
  14. 基于Spark的学生成绩分析系统
  15. 随记(七):Jboss漏洞检测利用工具
  16. 谁的盛世————读《饥饿的盛世》有感
  17. 汽车电子行业英语、缩写、中英对照
  18. 弘辽科技:新手开淘宝店的步骤有哪些?如何起步?
  19. python 小说人物分析_用Python来看金庸先生的小说,这一生向大侠致敬
  20. 防火墙区域及工作模式

热门文章

  1. Gos —— 开启中断与中断机制详解
  2. java 斜率求角度_计算两条线之间的角度而不必计算斜率? (Java)
  3. 第一章:基本概念(博弈论、纳什均衡、维克瑞拍卖、POA、赞助搜索拍卖)
  4. C语言 判断一个数是否为水仙花数
  5. 计算机文档怎么字符加宽间距,Word2013设置字符间距,如何设置两个字符之间的距离 -电脑资料...
  6. element 验证出现英文以及自动验证问题
  7. vmwareshanch删除快照以及删除快照时卡住的解决办法
  8. chrome js 读取文件夹_javascript – 如何从chrome扩展程序读取文件?
  9. 若要接收后续 google chrome 更新,您需使用 windows 10 或更高版本
  10. Mip-NeRF 360