开发者社区> 白展糖> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

简介: 除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
+关注继续查看
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:


  一、根据Context获取SharedPreferences对象


  二、利用edit()方法获取Editor对象。


  三、通过Editor对象存储key-value键值对数据。


  四、通过commit()方法提交数据。


  具体实现代码如下:


public class MainActivity extends Activity {
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //获取SharedPreferences对象
        Context ctx = MainActivity.this;       
        SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
        //存入数据
        Editor editor = sp.edit();
        editor.putString("STRING_KEY", "string");
        editor.putInt("INT_KEY", 0);
        editor.putBoolean("BOOLEAN_KEY", true);
        editor.commit();
        
        //返回STRING_KEY的值
        Log.d("SP", sp.getString("STRING_KEY", "none"));
        //如果NOT_EXIST不存在,则返回值为"none"
        Log.d("SP", sp.getString("NOT_EXIST", "none"));
     }
 }

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


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


1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3 <string name="STRING_KEY">string</string>
4 <int name="INT_KEY" value="0" />
5 <boolean name="BOOLEAN_KEY" value="true" />
6 </map> 



在程序代码中,通过getXXX方法,可以方便的获得对应Key的Value值,如果key值错误或者此key无对应value值,SharedPreferences提供了一个赋予默认值

的机会,以此保证程序的健壮性。如下图运行结果中因为并无值为"NOT_EXIST"的Key,所以Log打印出的是其默认值:“none”。在访问一个不存在key值这个

过程中,并无任何异常抛出。


 

 SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences

也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据

存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android SQLite 使用 query 查询特定行数据
Android SQLite 使用 query 查询特定行数据
0 0
android retrofit 请求返回String数据中文乱码解决方案
问题来源 focus 应用中核心的部分是,网络请求订阅的xml文件内容,然后解析xml文件存储到本地数据库。
0 0
嵌入式实践教程--Android音视频开发(二)-OpenSLES播放PCM数据
嵌入式实践教程--Android音视频开发(二)-OpenSLES播放PCM数据
0 0
Android 天气APP(二十七)增加地图天气的逐小时天气、太阳和月亮数据
Android 天气APP(二十七)增加地图天气的逐小时天气、太阳和月亮数据
0 0
Android 天气APP(二十五)地图天气(下)嵌套滑动布局渲染天气数据
Android 天气APP(二十五)地图天气(下)嵌套滑动布局渲染天气数据
0 0
Android 天气APP(二十一)滑动改变UI、增加更多天气数据展示,最多未来15天天气预报
Android 天气APP(二十一)滑动改变UI、增加更多天气数据展示,最多未来15天天气预报
0 0
Android 天气APP(二十二)改动些许UI、增加更多空气质量数据和生活建议数据展示
Android 天气APP(二十二)改动些许UI、增加更多空气质量数据和生活建议数据展示
0 0
Android 天气APP(二十)增加欢迎页及白屏黑屏处理、展示世界国家/地区的城市数据
Android 天气APP(二十)增加欢迎页及白屏黑屏处理、展示世界国家/地区的城市数据
0 0
Android 天气APP(十)继续优化、下拉刷新页面天气数据
Android 天气APP(十)继续优化、下拉刷新页面天气数据
0 0
Android基础入门:EventBus实现总线数据分发
我们之前学习了Activity-》Activity中的数据传送,是通过intent.putExtra()方法实现的,如果要实现Activity-》Fragment或者Fragment-》Fragment都是不方便的,通过EventBus能很好的解决这个问题
0 0
+关注
白展糖
十多年的JAVA码农,带着小组向前冲
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android插件化:从入门到放弃
立即下载