Android数据存储之Shared Preferences共享数据存储

在Android中一共提供了4种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些数据,就要使用Android提供的Content Provider(数据共享)。

Android中4种数据存储方式分别如下。

1、Shared Preferences:用来存储“Key-value paires”格式的数据。它是一个轻量级的键值存储机制,只可以存储基本数据类型。

2、Files:它通过fileInputStream和FileOutputStream对文件进行操作。但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。

3、SQLite:Android提供的一个标准的数据库,支持SQL语句

4、Network:通过网络来存储和获得数据

 

Shared Preferences数据存储

Shared Preferences主要是针对系统配置信息的保存,比如给程序界面设置了音效,想在下一次启动时还能够保留上次设置的音效。由于Android系统的界面是采用Activity栈的形式,所以在系统资源不足时会收回一些界面,因此,有些操作需要在不活动时保留下来,以便等再次激活时能够显示出来。

SharedPreference只允许存储基本数据类型。

获取Sharedpreference对象有两种方式,有Context的实例,比如Activity,调用下面的方法:

getSharedPreference():用这种方式获得Sharedpreference对象,需要在该方法的第一个参数指定该preference文件的名字

getPreference();用这种方式可以为你的Activity获取一个唯一的preference文件,并且不用指定名字。

并且在通过这两种方式获得Sharedpreference对象时,还要指定preference文件的读取模式,有3种模式(不是4种):

public static final int MODE_PRIVATE = 0x0000;  代表只有该程序可以访问

public static final int MODE_WORLD_READABLE = 0x0001; 代表其他程序只能进行读操作

public static final int MODE_WORLD_WRITEABLE = 0x0002; 代表其他程序可以进行读写操作

往preference文件中写数据:

1、调用edit()方法,获取一个SharedPreference.Editor对象

2、调用putBoolean()、putString()等等put...()方法存储数据

3、调用commit()方法,提交数据。因为调用put...()方法, 会先将数据存储在内存中,在调用commit()方法,将数据存储到preference文件中,这样做的好处是不必没存衣服咯数据,就对文件操作一次,节省内存开销。

从preference文件中读数据:

调用SharedPreference对象的 getBoolean、getString()等等get...()方法读取数据。

例子:

  1. );  
          SharedPreferences.Editor editor = settings.edit();  
          editor.putBoolean("silentMode", mSilentMode);  
      
          // 不要忘记提交commit()  
          editor.commit();  
        }  
    }  

    我们知道,SharedPreference 是以键值对存储的,从get和put的方式就可以看到,其实preference文件本身就是一个xml文件,打开看看就知道了。

这个用这种方式生成的preference文件,都有一个固定的位置:

File Explorer / data / data / 包名 / shared_prefs /  文件名字.xml

调用其他应用程序的Sharedpreference文件

要读取其他应用程序的,那么那个其他的应用程序的preference文件必须是可以读或者可以读写的。

步骤:

1、需要创建其他应用程序对应的Context,例如

Context context=createPackageContext("com.tao.androidtest", Context.CONTEXT_IGNORE_SECURITY);   

第一个参数是其他应用许的包名--实际上Android系统是用应用程序的包名来作为该程序的标志的。

第二个参数为flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。

2、在用其他应用程序的Context的getSahredPreference()方法即可获取相应的SahredPreference对象。

只有那个其他应用程序的preference文件的Mode设置为MODE_WORLD_READABLE或或者MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE,才能被外部应用程序访问。

然后用法就可在本程序中使用SahredPreference对象一样的使用。

当然上面的是通过Android提供的API操作的,也可以自己构建File文件,在解析里面的xml文件在操作,只不过这种方式更为繁琐。

File file=new File("data/data/com.tao.androidtest/shard_prefs/test.xml");

获得File文件,然后去解析里面的xml文件。

最新文章

  1. 关于python如何简单跳出多层循环
  2. 已解决:Strict Standards: Non-static method cls_image::gd_version() should not be called statically in...
  3. [办公自动化]一次制作、多场合多次使用的PPT
  4. 使用soureTree删除分支
  5. 怎么向Xcode6 IOS8之后向项目中添加预编译文件
  6. parquet 合并元数据
  7. hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)
  8. java IoC
  9. 云端TensorFlow读取数据IO的高效方式
  10. 201521123011《Java程序设计》 第12周学习总结
  11. 微信app支付(android端+java后台)
  12. c++面经积累<2>
  13. Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
  14. Python之函数第三篇
  15. JQuery学习二-字典操作
  16. 使用Rancher的RKE快速部署Kubernetes集群
  17. Sql server数据库连接Oracle库的步骤
  18. JavaScript学习笔记——错误处理
  19. 【转】【Python】Python中的__init__.py与模块导入(from import 找不到模块的问题)
  20. 白化whitening

热门文章

  1. Injection of autowired dependencies failed;错误解决
  2. Web项目之Django实战问题剖析
  3. 解决VS2013无法安装ArcObjects10.2的问题
  4. Bootstrap历练实例:块级按钮
  5. iOS7.1企业版发布后用户通过sarafi浏览器安装无效的解决方案
  6. Swift在1.2版本的变化
  7. vue循环出来列表里面的列表点击click事件只对当前列表有效;
  8. 记服务器 httpd 服务无法启动
  9. 【css】报错,错误代码77,CURLE_SSL_CACERT_BADFILE (77)解决方法
  10. Python日志(logging)模块,shelve,sys模块