SharedPreferences存储

概述

SharePreferences是用来存储一些简单配置信息的一种机制,使用Map数据结构来存储数据,以键值对的方式存储,采用了XML格式将数据存储到设备中。
例如保存登录用户的用户名和密码。只能在同一个包内使用,不能在不同的包之间使用,其实也就是说只能在创建它的应用中使用,其他应用无法使用。
创建的存储文件保存在/data/data//shares_prefs文件夹下。

使用

通过Context.getSharedPreferences方法获取SharedPreferences对象,参数分别为存储的文件名和存储模式。

1
2
3
4
5
6
7
8
9
10
// 获取SharedPreferences对象  
SharedPreferences sp = getSharedPreferences(DATABASE, Activity.MODE_PRIVATE);
// 获取Editor对象
Editor editor = sp.edit();
//添加数据
editor.putString("key","value");
//操作完必须提交
editor.commit();
//取数据
sp.getString("key");

操作模式

Context.MODE_PRIVATE

指定该SharedPreferences数据只能被本应用程序或者是拥有相同user ID的应用读、写。

Context.MODE_WORLD_READABLE

指定该SharedPreferences数据能被其它应用程序读,但不能写。
这个变量在API 17以后已经不建议使用了。创建全局可读文件是非常危险的事,这样会引起程序的安全漏洞。程序之间的交互应该更多的使用正规的途径,比如:ContentProvider, BroadcastReceiver, and Service.当程序通过备份和恢复后,并不能保证这种获取方式依然对该文件有效。文件创建模式:允许所有的其它程序来读取创建的文件。

Context.MODE_WORLD_WRITEABLE

指定该SharedPreferences数据能被其它应用程序读,写。
这个变量在API 17以后已经不建议使用了。创建全局可写文件是非常危险的事,这样会引起程序的安全漏洞.程序之间的交互应该更多的使用正规的途径,比如:ContentProvider, BroadcastReceiver, and Service.当程序通过备份和恢复后,并不能保证这种获取方式依然对文件有效。文件创建模式:允许所有的其它程序来修改创建的文件。

Context.MODE_MULTI_PROCESS

在API11中添加,SharedPreferences加载标记:被设置后,在硬盘上的文件在被修改是将会被检查如果当前的SharedPreferences实例已经被加载进进程后。这种情况通常发生在,当程序有多个进程在修改同一个SharedPreferences文件的时候。通常来说这种方式在进程之间交互表现是非常好的。

文件存储

概述

Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件。在默认状态下,文件是不能在不同程序间共享的。
当用户卸载您的应用程序时,这些文件删除。
文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的
数据,通过deleteFile方法删除一个指定的文件。

使用

File是通过FileInputStream和FileOutputStream对文件进行操作。
Context提供了如下两个方法来打开本应用程序的数据文件将爱丽的文件IO流。

1
2
3
4
//打开应用程序的数据文件夹下的name文件对应输入流。
FileInputStream fsinput=this.openFileInput(String name);
//打开应用程序的数据文件夹下的name文件对应输出流。
FileOutputStream fsoutput=this.openFileOutput(String name,int mode);

存储模式

Context.MODE_PRIVATE

私有覆盖模式

  • rw- rw- —
    只能被当前应用访问,并且如果写入,则覆盖;

Context.MODE_APPEND

私有追加模式

  • rw- rw- —
    只能被当前应用访问,并且如果写入,则追加;

Context.MODE_WORLD_READABLE

公有只读模式

  • rw- rw- r–
    可以被其他应用读取;

Context.MODE_WORLD_WRITEABLE

公有可写模式

  • rw- rw- -w-
    可以被其他应用写入,但不能读取;

模式可叠加

如:Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE 表示其他应用读写;

SQLite数据库存储

使用ContentProvider存储数据

网络存储数据

待续……