Android开发之数据储存
相关文章
Android提供了五种数据存储方式:分别是:SharePreferences、SQLite、Contert Provider、文件存储、网络存储。
1.1 SharedPreferences
1.SharedPreferences用来存储一些简单的信息,以键值对的模式进行存储,键值对(key-value)。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口。
2.SharedPreferences本身是一个接口:
程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法获取SharedPreferences实例,该方法中name表示要操作的xml文件名;
第二个参数具体如下:
**Context.MODE_PRIVATE:**指定该SharedPreferences数据只能被本应用程序读、写。
**Context.MODE_WORLD_READABLE:**指定该SharedPreferences数据能被其他应用程序读,但不能写。
**Context.MODE_WORLD_WRITEABLE:**指定该SharedPreferences数据能被其他应用程序读,写。
3、Editor有如下主要重要方法:
(1)SharedPreferences.Editor clear():清空SharedPreferences里所有数据。
(2)SharedPreferences.Editor putXxx(String key , xxx value):向SharedPreferences存入指定key对应的数据,其中xxx可以是boolean,int, long,float和Stringt等基本类型据。
(3)SharedPreferences.Editor remove():删除SharedPreferences中指定key对应的数据项。
(4)boolean commit(): 当Editor编辑完成后,使用该方法提交修改。
4 .SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。
实际sharedPreferences是采用了XML格式将数据存储到设备中,在DDMS 中的File Explorer中的/data/data//shares_prefs下。
5 .SharedPreferences对象与SQLite数据库相比,免去了创建数据库、创建表、写SQL语句等诸多操作,更加方便、简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
1.2 文件存储
1.文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。
如果想使用文件存储的方式来保存一些较为复杂的文本数据,就需要定义一套自己的格式规范,这样方便于之后将数据从文件中重新解析出来。
2.Context 类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。
这个方法接收两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data//files/目录下的。第二个参数是文件的操作模式 ,主要有两种模式可选,MODE_PRIVATE 和 MODE_APPEND。其中 MODE_PRIVATE 是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,而 MODE_APPEND 则表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。
文件的操作还有另外两种模式,MODE_WORLD_READABLE和MODE_WORLD_ WRITEABLE,这两种模式表示允许其他的应用程序对我们程序中的文件进行读写操作,不过由于这两种模式过于危险,很容易引起应用的安全性漏洞,现已在 Android 4.2 版本中被废弃。
3.Context还提供了如下几个重要的方法:
getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录。
File getFilesDir():获取该应用程序的数据文件夹得绝对路径。
String[] fileList():返回该应用数据文件夹的全部文件。
4.相关API
FileInputStream类中的openFileInput()方法,用于读取数据。
FileOutputStream类中的openFileOutput()方法,用于写入数据。
1.3 SQLite
SQLite是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的api。
1.4 ContentProvider
Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。
1.5 网络存储
Android提供了通过网络来实现数据的存储和获取的方法。可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。
具体需要熟悉java.net.*,Android.net.*这两个包的内容,详细的类与方法的说明,请参考SDK。
1.6 案例演示
实现一个登陆注册的安卓项目,数据存储用SharedPreferences来操作。
1.新建一个安卓项目,编写布局。
2.在MainActivity中实现代码。
3.创建完成后安装到雷电模拟器,注册登陆,然后利用MT管理器查看/data/data/<包名>/shared_prefs目录下文件的变化。
小结
本次主要分享:
1.使用Shared Preferences存储数据,用来存储key-value,pairs格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类 型。
2.使用文件存储数据,通过FileInputStream和FileOutputStream对文件进行操作。
3.使用SQLite数据库存储数据,Android提供的一个标准数据库,支持SQL语句。
4.使用Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。
5.使用网络存储数据。
如果你也对安卓逆向感兴趣。可以加下方的群,大家一起讨论问题,或者扫描下方二维码,关注回复 “安卓逆向” 获取免费教程
安卓逆向交流学习:342647370
vx:Yjxiaox