博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android数据的四种存储方式(三) —— SharePreferences
阅读量:6903 次
发布时间:2019-06-27

本文共 2432 字,大约阅读时间需要 8 分钟。

hot3.png

我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是在window下通常我们会采用ini文件进行保存.如果是J2EE下面,我们会采用properties属性文件或者xml进行保存.在我们的应用中又适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级应用程序内部轻量级的存储方案,特别适合用于保存软件配置参数,比如boolean,int,float,long,String等数据.使用SharedPreferences保存数据,其实质是采用了xml文件存放数据,路径为:/data/data/<package name>/shared_prefs.

获取SharedPreferences的两种方式:

1 调用Context对象的getSharedPreferences()方法

2 调用Activity对象的getPreferences()方法

两种方式的区别:

调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他共享.

调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.

 

SharedPreferences的四种操作模式:

Context.MODE_PRIVATE

Context.MODE_APPEND

Context.MODE_WORLD_READABLE

Context.MODE_WORLD_WRITEABLE

 

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.

  具体实现代码如下:

复制代码

1 publicclass MainActivity extends Activity {
2    @Override 3 publicvoid onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState); 5       setContentView(R.layout.main); 6       7 //获取SharedPreferences对象 8       Context ctx = MainActivity.this;       9       SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE); 10 //存入数据 11       Editor editor = sp.edit(); 12       editor.putString("STRING_KEY", "string"); 13       editor.putInt("INT_KEY", 0); 14       editor.putBoolean("BOOLEAN_KEY", true); 15       editor.commit(); 16       17 //返回STRING_KEY的值 18       Log.d("SP", sp.getString("STRING_KEY", "none")); 19 //如果NOT_EXIST不存在,则返回值为"none" 20       Log.d("SP", sp.getString("NOT_EXIST", "none")); 21    } 22 }

复制代码

   这段代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。如图所示: 

   SP.xml文件的具体内容如下:

1 
2 3
string
4
5
6

  在程序代码中,通过getXXX方法,可以方便的获得对应Key的Value值,如果key值错误或者此key无对应value值,SharedPreferences提供了一个赋予默认值的机会,以此保证程序的健壮性。如下图运行结果中因为并无值为"NOT_EXIST"的Key,所以Log打印出的是其默认值:“none”。在访问一个不存在key值这个过程中,并无任何异常抛出。  

  SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

转载于:https://my.oschina.net/u/1463230/blog/278910

你可能感兴趣的文章
[网络流24题-8]汽车加油行驶问题
查看>>
Vim使用技巧(2) -- 插入模式技巧 【持续更新】
查看>>
Spring MVC+Fastjson之时间类型序列化
查看>>
【ospf-路由过滤】
查看>>
进阶: 案例八: Drag and Drop(动态)
查看>>
Remove Duplicates from Sorted List II
查看>>
Python中else的用法
查看>>
蓝桥杯 迷宫
查看>>
多行截断
查看>>
完成个人中心 导航标签
查看>>
使用位生成子集
查看>>
需求分析--12章 过程建模
查看>>
C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库...
查看>>
css3选择器
查看>>
nginx虚拟主机配置
查看>>
PYthon基础
查看>>
delphi 把一个表的内容转到另一个表暂存时出错的解决方法。
查看>>
Android Studio 使用笔记:[转] Mac下修改Android Studio 所用的JDK版本
查看>>
《陶哲轩实分析》习题10.4.1
查看>>
【转载】浅析java中的语法糖
查看>>