当前位置:文档之家› Android中5种数据存储方式

Android中5种数据存储方式

Android中5种数据存储方式1概述SharedPreferences存储数据。

ContentProvider存储文件存储SQLlite存储网络存储Preference,File,DataBase这三种方式分别对应的目录是:●/data/data/Package Name/Shared_Pref●/data/data/Package Name/files●/data/data/Package Name/database关于这五种数据存储方式,根据实际情况选择最合适的,秉持最简单原则,也就是说能用简单的方式处理,就不要用复杂的方式。

比如存储几个数据或简单对象,用SharedPreference也能做到,就没必要写个ContentProvider。

●简单数据和配置信息,SharedPreference是首选;●如果SharedPreferences不够用,那么就创建一个数据库;●结构化数据,一定要创建数据库,虽然这稍显烦锁,但是好处无穷;●文件就是用来存储文件(也即非配置信息或结构化数据),如文本文件,二进制文件,PC文件,多媒体文件,下载的文件等等;●尽量不要创建文件;●如果创建文件,如果是私密文件或是重要文件,就存储在内部存储,否则放到外部存储。

2SharedPreferences存储数据SharedPreferences 可以将数据保存到应用程序的私有存储区,这些存储区中的数据只能被写入这些数据的软件读取。

它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。

其存储位置在/data/data/<包名>/shared_prefs 目录下。

使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。

例如:登录用户的用户名与密码。

步骤如下:(1)使用Activity类的getSharedPreference 方法获得SharePreferences对象。

其中存储key-value 的文件名称由getSharedPreferences方法的第一个参数指定;第二个参数表示所创建的数据文件的访问权限(“MODE_WORLD_READABLE”表示其他用户有“读”的权限;“MODE_WORLD_WRITEABLE ” 表示其他用户有“写”权限;MODE_PRIVATE 和MODE_APPEND创建的文件对其他用户都是不可访问的);(2)使用SharedPreferences 接口的edit 获得SharedPreferences.Editor对象;(3)通过Sharedreferences.Editor接口的putXxx方法保存key-value对。

其中Xxx表示value 不同数据类型。

例如,Boolean类型的value需要用putBoolean方法,字符串类型的value需要用putString方法;(4)通过Sharedreferences.Editor接口的commit方法保存key-value对。

commit方法相当于数据库事务中的提交(commit)操作,只有在事务结束后进行提交,才会将数据真正保存在数据库中。

保存key-value也是一样,在使用putXxx方法指定了key-value对后,必须调用commit方法才能将key-value对真正保存在相应的文件中。

运行该程序,并在相应的组建输入值,然后退出应用程序,再次进入程序,系统会将上次输入的数据显示在相应组件中。

*由于应用程序在退出时会将组件的值保存在文件中,因此需要将保存的Key-value对的代码写在Activity类的onStop方法中。

从bjh.xml中获得数据3ContentProvider存储3.1用途●ContentProvider可以解决两个程序之间数据进行交换问题;●ContentProvider提供了一种多应用间数据共享的方式,比如:联系人信息可以被多个应用程序访问;●ContentProvider是个实现了一组用于提供其他应用程序存取数据的标准方法的类。

应用程序可以在ContentProvider中执行如下操作: 查询、修改、添加、删除;●标准的ContentProvider: Android提供了一些已经在系统中实现的标准ContentProvider,比如联系人信息,图片库等等,你可以用这些ContentProvider来访问设备上存储的联系人信息,图片等等。

3.2好处当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。

虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。

而使用ContentProvider共享数据的好处是统一了数据访问方式。

Android 这个系统和其他的操作系统还不太一样,我们需要记住的是,数据在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。

要想解决两个程序之间数据交换问题主要靠ContentProvider。

一个ContentProvider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此ContentProvider的各种数据类型。

也就是说,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据暴露出去。

外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。

一个程序可以通过实现ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。

那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。

ContentResolver通过ContentProvider来获取其他与应用程序共享的数据。

其中ContentProvider 负责:●组织应用程序的数据;●向其他应用程序提供数据;●ContentResolver则负责●获取ContentProvider提供的数据;●修改/添加/删除更新数据等;3.3例如3.3.1依次读取联系人信息表中的指定数据列name和number3.3.2使用ContentResolver.update()方法来修改数据使用下面的方法可以更新指定记录:updateRecord(10, ”XYZ”); //更改第10条记录的name 字段值为“XYZ”3.3.3添加记录3.3.4删除记录4文件存储默认位置:/data/data/<包>/files/***.***。

openFileOutput 和openFileInput 方法于SharedPreferences 在某些方面非常类似。

4.1使用getSharedPreference 方法获得SharePreferences 对象SharedPreferences mySharedPreferences= getSharedPreferences(PREFERENCES_NAME,Activity.MODE_PRIVATE);4.2使用openFileOutput 方法返回一个OutputStream对象OutputStream os = openFileOutput(“file.txt”,Activity.MODE_PRIVATE);4.3使用openFileInput方法获得InputStream对象InputStream is=openFileInput(“file.txt”);openFileOutput() 方法的第一参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android 会自动创建它。

创建的文件保存在/data/data/<package name>/files目录,如:/data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“ShowView”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。

openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:●Context.MODE_PRIVATE = 0●Context.MODE_APPEND = 32768●Context.MODE_WORLD_READABLE = 1●Context.MODE_WORLD_WRITEABLE = 2Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。

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

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

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

如果希望文件被其他应用读和写,可以传入:openFileOutput(“itcast.txt”,Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。

默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data /<package name>/files),其他程序无法访问。

相关主题