Android数据存储五种

1 使用SharedPreferences存储数据

2 文件存储数据

3 SQLite数据库存储数据

4 使用ContentProvider存储数据

5 网络存储数据

1.1.SharedPreferences存储:

应用场景

适用于存储一些键值对,一般用来存储配置信息。

存储位置:

/data/data/包名/shared_prefs 目录下,以xml格式进行保存。

可存储的数据类型:

boolean float int long string

存储步骤:

1.根据上下文获取SharedPreferences对象。

2.利用edit()方法获取Editor对象。

3.通过Editor对象来存储key-value键值对数据。

4.通过commit()方法提交数据。

好处:

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

弊端:

1.只能存储五种简单的数据类型

2.无法进行条件查询

1.2.文件存储:

应用场景:

存储一些简单的文本数据或者二进制数据

存储在内存:

当应用安装到Android后,系统会根据每个应用的包名创建一个/data/data/包名/的文件夹,默认是私有的。

注意:如果直接File file = new File(“info.txt”);

这样就报文件找不到的异常,因为这样写会被创建到手机内部存储的根目录里面,但是内部存储根目录是只读不可写的。

优化:File file = new File(getFileDir,”info.txt”);

目录:

/data/data/<包名>/files/info.txt--->getFileDir()+”info.txt”

权限:

访问自己包名下的目录是不需要权限

方便api:

getCacheDir(); //方法用于获取/data/data/cache目录,缓存目录,当存储空间不足,系统会自动将之清除。

getFilesDir(); //方法用于获取/data/data/files目录,保存重要的数据信息

存储在sd卡:

目录:

mnt/sdcard/info.txt--->Envitonment.getExternalStorageState()+”info.txt”

权限:

方便api:

获取SD卡根目录

Environment.getExternalStorageDirectory()

获取SD卡的挂载状态

Environment.getExternalStorageState()

获取SD卡可用空间大小

Environment.getExternalStorageDirectory().getFreeSpace()

文件的权限

应用程序在data/data/<自己包名>/目录下创建的文件默认都是私有的,别的程序是不能访问的

在模拟器中我们能再看这个目录并导到桌面上打开,但是注意真实手机没有root权限,所以你根本打不开这个目录。


创建有权限的文件:

openFileOutput(“info.txt”,mode);


mode是文件访问权限:

Context.MODE_PRIVATE=0:默认为私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。

Context.MODE_APPEND=32768:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

MODE_WORLD_READABLE=1:表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE=2:表示当前文件可以被其他应用写入。

1.3.SQLite数据库存储

定义:

SQLiteOpenHelper是 Android 提供的一个抽象工具类,负责管理数据库的创建、打开、升级工作。如果我们想创建数据库,就需要自定义一个类继承 SQLiteOpenHelper,然后重写其中的抽象方法


应用场景:

适用于存储一些复杂的关系型数据。

存储位置:

data/<项目文件夹>/databases/下。

好处:

   支持SQL语言

         效率高,利用很少的内存就有很好的性能

十分适合存储结构化数据

   方便在不同的Activity,甚至不同的应用之间传递数据

1.4.ContentProvider存储

理解

一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。 

Android提供了一些已经在系统中实现的标准Content Provider,比如联系人信息,图片库等等,你可以用这些Content

Provider来访问设备上存储的联系人信息,图片等等。


示例Uri:

content://media/internal/images这个URI将返回设备上存储的所有图片

content://contacts/people/这个URI将返回设备上的所有联系人信息

content://contacts/people/45这个URI返回单个结果(联系人信息中ID为45的联系人记录)


这种查询字符串格式有点令人迷惑。为此,Android提供一系列的帮助类(在android.provider包下),里面包含了很多以类变量形式给出的查询字符串,这种方式更容易让我们理解一点,参见下例:

MediaStore.Images.Media.INTERNAL_CONTENT_URI

Contacts.People.CONTENT_URI


因此,如上面content://contacts/people/45这个URI就可以写成如下形式:

Uri person = ContentUris.withAppendedId(People.CONTENT_URI, 45);

然后执行数据查询: Cursor cur = managedQuery(person, null, null, null);


应用场景:

增删改查其他应用程序中私有数据。

Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。



创建内容提供者编写的流程:

1.写一个类继承ContentProvider,实现增删改查的方法,声明uriMatcher匹配规则,来检查uri路径是否正确

2.清单文件配置:

android:name="com.bank.BankDBBackdoor"

android:authorities="com.bank.db"

android:exported="true" />

3.在另一个程序里面通过contentResolver增删改查

1.5.网络存储

应用场景:

存储比较重要的数据,比如支付宝账号密码等等

可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。

权限:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358