Android数据保存之SharedPreference
前言:
程序中处理的大部分问题都与数据有关,读取数据显示在UI上,读取的数据可以是本地的,也可以是网络的。保存用户数据到存储空间,可以是本地的数据库,文件等,也可以是保存到网络服务器。总之大部分的程序都是在和数据打交道。Android中数据保存比较方便灵活,今天就按照官网说说数据保存。
大多数Android应用程序都需要存储数据,在Android生命周期方法onPause中,你可以保存用户在程序中的进度数据,在用户再次进入程序时进行读取恢复。可能一些应用程序不需要保存用户的进度信息,但是用户对于应用程序的设置信息一定要保存。很多应用需要保存大量的数据到数据库或者文件里,比如看电视的应用,需要保存大量的频道信息。下面就给大家介绍一下在Android中数据是如何保存的。
key-value键值集合保存数据:
如果你有一些相对较少的键值数据集需要保存,那么SharedPreferences应该能够满足你。一个SharedPreferences对象指向了一个键值对形式保存数据的Shared Preference文件,它提供了一些很方便读取和写入数据的方法。每一个SharedPreferences文件都被Android framework管理,可以是只能创建它的应用程序访问,也可以分享给其他应用程序。怎么用SharedPreferences·保存数据呢?
获取SharedPreferences对象:
你可以创建一个新的Shared Preference 共享文件,如果已经存在则直接返回指向该共享文件的SharedPreferences该对象,有两种方法可以完成这个工作:
- getSharedPreferences(String name, int mode)
此方通通过Context对象调用,返回一个唯一的SharedPreferences对象,这里的唯一指的是通过name来查找的唯一对应的SharedPreferences,如果没有查找到则会用name来创建一个。唯一的好处就是你在一个地方保存后在另外的地方立刻就能读取到这个值。用mode来区分创建的SharedPreferences对象共享类型,MODE_PRIVATE表示该应用程序私有,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE是表示全局读或写权限,MODE_MULTI_PROCESS表示可以跨进程访问。
- getPreferences(int mode)
此方法被Activity对象调用,会创建一个只能被该Activity访问的SharedPreferences对象,该方法是封装的上面的那个方法,默认创建的SharedPreferences名字是该Activity的名字,所以不用传此参数,mode只有MODE_PRIVATE、MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE三个可选,缺少MODE_MULTI_PROCESS,因为只有该Activity有权限访问,所以跨进程没什么用。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key),Context.MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
注意:当你创建SharedPreferences时mode值的是MODE_WORLD_PRIVATE或者MODE_WORLD_WRITEABLE,你创建的Shared Preferences文件是可以被其他应用程序访问的。这两种mode都是比较危险的,因为其他应用程序也能访问,所以会造成数据外泄。google给出的建议是尽量不要用这种机制来进行数据共享传递,可以用其他方法来代替这种机制,比如使用ContentProvider,BroadcastReceiver或者Service。
写入数据到Shared Preferences文件:
写入数据到Shared Preferences是通过获取SharedPreferences.Editor对象,调用该对象的一些putXX(key,value)方法来写入key对应的值,然后调用commit()方法提交写入完成的,代码如下:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
注意:commit()和apply()都是提交对数据的操作,但是它们还是有些区别的:1、commit方法有返回值,返回值是一个boolean变量,表示你的保存动作是否成功,apply是没有返回值的,所以如果你不需要返回值,也不关心提交是否成功可以用apply来代替commit;2、apply是先把数据更改提交到内存,然后再异步保存到磁盘上,而commit这两个操作是同步的,所以在进行频繁提交数据更改时apply更为高效;
读取数据从Shared Preferences文件:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
总结:
以上就是利用SharedPreferences进行数据保存的知识,基本上包含了所有使用SharedPreferences的方法和注意事项,有哪些地方写的不好还请大神们批评指正。下一篇文章继续聊Android中的数据保存之文件保存,谢谢大家!
本文属原创,转载请注明出处,违者必究
关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。
转载于:https://www.cnblogs.com/2010wuhao/p/4670767.html
Android数据保存之SharedPreference相关推荐
- Android 数据访问之SharedPreference demo+笔记
我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是在window下通常我们会采用ini文件进行保存.如 ...
- android数据保存
永久保存数据的方法: 1.Shared Preferences 以键值对的形式存储基本数据类型( booleans, floats, ints, longs, and strings),存储的数据在限 ...
- Android数据存储之SharedPreferencesSave存储(保存数据,读取数据的操作)
GitHub项目地址: https://github.com/Skymqq/SharedPreferencesSave.git 不同于文件的存储方式,SharedPreferences是使用键值对的方 ...
- android SharedPreferences保存list数据
今天,简单讲讲如何使用 SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static boolean saveA ...
- android 同步list数据,android SharedPreferences保存list数据
释放双眼,带上耳机,听听看~! 今天,简单讲讲如何使用SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static b ...
- Unity Easy Save数据保存插件将数据保存到Android手机根目录
Unity Easy Save数据保存插件将数据保存到Android手机根目录 原由 导入插件 设置保存路径 测试脚本 界面 测试验证 问题 原由 开发时碰到一个需求,两个手机APP,一个保存数据,一 ...
- Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装
文件存储 前言 文件存储 内存 内部存储 外部存储 内部存储操作 API 读写操作 外部存储操作 公共目录 私有目录 私有文件 私有缓存 文件各种操作封装 前言 众所周知,数据存储在每个应用中都会用到 ...
- Android SQLite在应用中数据保存查询,但是拷贝的xxx.db没有数据或没有更新,.db_wal和.db_shm文件
Android SQLite在应用中数据保存能查询,但是拷贝的xxx.db没有数据或没有更新问题,.db_wal和.db_shm文件是什么 文章目录 问题 原因 解决方法 SQLite的.db_wal ...
- Android中Fragment数据保存和恢复
原文地址:请扫文后stormzhang大神的微信公众号--AndroidDeveloper 写在前面 上周我们总结了Activity中数据的保存和恢复,我们花两分钟来回顾一下: Android中突发情 ...
最新文章
- TensorFlow损失函数
- AI视觉组仙人一步之模型调优
- python oa系统_用python把C#操作OA的例子重写了一下
- java调用scilab_Java调用Scilab-编译运行Javasci v2
- Transformer的一家!
- C# MD5算法实现对文件校验
- CoreOS部署及应用
- git difftool 使用 p4merge,DiffMerge 或者 Beyond Compare 4
- Java8中关于LocalDateTime转换方法总结
- CF1467C Three Bags(思维)
- 【转】MIT博士林达华解说数学体系
- Mybatis【面试题】
- 用javascript写一个简单的登录表单,包含用户名、密码和手机号码。提交数据时验证用户名、密码和手机号输入格式。
- 娄底环宇中等职业技术学校
- 高手教你ie主页被篡改怎么办|加个参数永远不怕IE主页被修改
- 逻辑思维不强的适合学java嘛_逻辑思维能力的培养很重要吗
- JAVA 页面置换先进先出算法(FIFO)
- linux系统下制作启动u盘,制作Linux系统启动盘的四种简便方法
- 433/315无线接收芯片 XL520 射频芯片 规格书
- 税务UKey开票软件 V1.0.22_ZS_20221231 版本数据库分析
热门文章
- 使用u-boot的USB下载功能烧写程序到Nand Flash ——韦东山嵌入式Linux学习笔记06
- Maven -- group、artifact、package
- ORACLE SQL笛卡尔集
- How to Build Your Own Blockchain Part 4.2 — Ethereum Proof of Work Difficulty Explained
- Android7.0 PowerManagerService(3) 核心函数updatePowerStateLocked的主要流程
- 数据库连接python_python连接数据库
- send函数 获得已发送数据长度_蓝牙BLE开发1--起因与回调函数
- 三相逆变器双pi控制器参数如何调节_Boost 变换器 PI参数设计举例
- php图形图像,php图形图像处理
- part.write java_小白向:web中利用request.getPart()上传文件到服务器