Android学习路线_入门篇(八)数据持久化之SharedPreferences

数据持久化是保证数据在程序销毁、设备关机后仍然不会丢失的操作,Android系统上主要有三种方式。第一个先看看SharedPreferences,一个轻量级的存储类,特别适合用于保存配置参数,它使用键值对的方式来存储数据,最终的文件存放位置在/data/data/<packagename>/shared_prefs/目录下。

本文已收录至☞Android学习路线_梳理
上一篇☞Android学习路线_入门篇(七)四大组件之ContentProvider
下一篇☞Android学习路线_入门篇(九)数据持久化之文件读写

1. SharedPreferences适用范围

SharedPreferences一个轻量级的存储类,特别适合用于保存配置参数,它使用键值对的方式来存储数据,文件存储的数据格式是xml,支持的数据类型包括int、boolean、float、long、String、StringSet。

根据SharedPreferences的上述性质,通常将其用于保存简单的设置数据、个性化配置、本机用户信息、口令、token之类的简单数据。

2. 获取SharedPreferences对象的方式

在使用SharedPreferences的时候,一定要先获取SharedPreferences的对象,并不是手动new一个SharedPreferences对象。系统提供的获取方式一共有三种:

  1. Context类中的getSharedPreferences()方法
    此方法接收两个参数,第一个用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个。第二个参数用于指定操作模式,目前只有MODE_PRIVATE一种可选,默认,和直接传入0效果相同,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。

  2. Activity类中的getPreferences()方法
    这个方法和第一个相似,不过它只接收一个操作模式参数,因为使用这个方法会自动将当前活动的类名作为SharedPreferences文件名。

  3. PreferencesManager类中的getDefaultSharedPreferences()方法
    这是一个静态方法,它只接收一个Context参数,并自动使用当前程序的包名作为前缀来命名SharedPreferences文件。

根据介绍,相信你已经发现了,Context类中的getSharedPreferences()方法最为灵活,因此这个方式也是最常使用的。

3. 使用SharedPreferences读取数据

在使用前需要先获取SharedPreferences对象,我们选用Context类中的getSharedPreferences()方法,使用Application去获取是较为稳妥的方式。

获取SharedPreferences对象之后,可以通过SharedPreferences的getInt()getBoolean()getFloat()getLong()getString()getStringSet()获取不同类型的数据,这些方法入参均为两个,第一个为数据的键Key,Key为String类型,第二个为默认值DefValue,获取失败时方法会返回传入的默认值。

示例:

SharedPreferences pref = context.getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");

4. 向SharedPreferences写入数据

在使用前需要先获取SharedPreferences对象,我们选用Context类中的getSharedPreferences()方法,使用Application去获取是较为稳妥的方式。

获取SharedPreferences对象之后,通过SharedPreferences的edit()方法获取Editor编辑器,此时通过Editor编辑器才能向SharedPreferences对象中写入数据。写入数据的方法和获取数据类似,通过SharedPreferences的putInt()putBoolean()putFloat()putLong()putString()putStringSet()写入不同类型的数据,这些方法入参均为两个,第一个为数据的键Key,第二个为要写入的值Value。

写入数据后,还需要进行提交才能生效。提交的方式有两种:

  1. Editor对象的commit()方法
    这个方法在当前线程执行,会对当前线程造成阻塞,文件写入完成之后才会执行后续操作。

  2. Editor对象的apply()方法
    这个方法会新建子线程执行,对当前线程无影响,但每次系统有Activity切换时都会等待文件写入完成,所以无节制的apply也对APP的流畅性有影响,多个键值对的写入可以先完成全部的put操作后再最后执行apply。

示例:

SharedPreferences.Editor editor = context.getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","小明");
editor.apply();

完毕

今天的分享就到这里,文章多有不足,各位小伙伴有什么想法可以直接评论或是私信,要是对你有所帮助就给我一个赞吧,喜欢我的小伙伴可以关注我哦~

本文已收录至☞Android学习路线_梳理
上一篇☞Android学习路线_入门篇(七)四大组件之ContentProvider
下一篇☞Android学习路线_入门篇(九)数据持久化之文件读写

支持我的小伙伴们可以微信搜索“Android思维库”,或者微信扫描下方二维码,关注我的公众号,每天都会推送新知识~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值