为了账号安全,请及时绑定邮箱和手机立即绑定

Android中数据存储,知多少?

【一Android中数据存储


Android的数据存储有5种方式

(1).    文件存储

(2).    SharedPreference存储

(3).    SQLite数据库存储

(4).    使用ContentProvider存储数据

(5).    网络存储数据


Android 应用数据文件存储路径

Android studio连接设备,利用Device File Explorer(Android Studio 3.0 工具)

进入到/data/data//files/目录下,可以看到文件了。

打开方式一:View->Tool|Windows->Device File Explorer


https://img3.sycdn.imooc.com/5e1c19cb00013fdb04690363.jpg

打开方式二:

https://img3.sycdn.imooc.com/5e1c19cb0001289509340394.jpg

举例:文件可导出,可删除,可上传覆盖


https://img1.sycdn.imooc.com/5e1c19cb0001440c03350139.jpg


【二数据存储方式


1. SharedPreferences存储数据 

SharedPreferences数据存储,也叫作xml存储。是将数据存储 “data/data/<package  name>/share_prefs”路径下的到xml文件中。

https://img2.sycdn.imooc.com/60a756910001198701400140.jpg


https://img1.sycdn.imooc.com/60a756920001198701400140.jpg

 特点:SharedPreferences数据存储方式,用来存储一些简单的信息(比如应用程序的各种配置信息),位于android.content包中,以键值对(key-value)的模式进行存储。存储的基本信息,如int,string,boolean,float和long类型。


https://img1.sycdn.imooc.com/60a756920001bf8a04130052.jpg

SharedPreferences数据文件示例:

https://img1.sycdn.imooc.com/60a756920001249809760229.jpg

不难看出,SharedPreferences数据文件的根元素是<map…/>,该元素里每个子元素代表一个key-value对,当value是字符串类型时,使用<string…/>子元素。

获得SharedPreferences对象的方法

SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的方法获取SharedPreferences实例;

(1).    通过Context的getSharedPrerences(key, [模式])方法获取SharedPreferences对象;方法的第一个参数是用于指定SharedPreferences文件的名称,第二个参数是指定操作模式,主要有两种模式进行选择:MODE_PRIVATE, MODE_MULTI_PROCESS。默认操作是MODE_PRIVATE。(因为存在安全漏洞,Android 4.2开始不再推荐使用MODE_EORLD_READEABLE,MODE_WORLD_WRITEABLE这两种模式)。

(2).    通过Activity类提供的getPrerences(key)方法获取到SharedPreferences对象;该方法会创建一个以当前活动类名作为SharedPreferences文件名的文件。

(3).   通过PreferencesManager类中的getDefaultPreferernces()方法获得;这是一个静态的方法,他接受一个Context参数,并将当前应用程序的包名作为SharedPreferences文件名。


    示例:

https://img1.sycdn.imooc.com/60a75692000106f909240073.jpg

2. 文件存储数据

文件存储是Android中最基本的一种存储方式,和Java中实现I/O的方式,由Context类提供openFileInput()和openFileOutput()方法打开。文件存储主要分两种存储,一种是内部存储,一种是外部存储。

内部存储

内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/<package name>/files”路径下的相应文件中。

https://img2.sycdn.imooc.com/60a756920001947f07430557.jpg

Context提供了两个方法来打开应用程序的数据文件夹里的文件IO流。

(1)files目录下读数据:FileInputStream  openFileInput(String filename),打开应用程序的数据文件夹下的filename文件对应的输入流;

(2)files目录下写数据:FileOutputStream  openFileOutput(String filename, int mode),打开应用程序的数据文件夹下的filename文件对应的输出流;

mode参数:打开文件的模式

(1)MODE_PRIVATE:该文件只能被当前程序读写;

(2)MODE_APPEND:以追加方式打开该文件,应用程序可再向该文件追加新的内容。

(还有MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE,这两种模式表示允许其他应用程序对我们的程序文件进行读写操作,因存在安全漏洞,Android 4.2不再推荐使用)


示例:

https://img2.sycdn.imooc.com/60a756930001198701400140.jpg

https://img1.sycdn.imooc.com/60a756930001198701400140.jpg


外部存

外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡)。

https://img2.sycdn.imooc.com/60a75693000154ca03620088.jpg

https://img1.sycdn.imooc.com/60a756930001c96b07430385.jpg

使用外部存储要在AndroidManifext.xml中加入访问权限:

https://img2.sycdn.imooc.com/60a756e10001551806540067.jpg

外部存储,使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。

示例

https://img1.sycdn.imooc.com/60a756e10001198701400140.jpg

3. SQLite数据库存储数据

SQLite是一款轻量级的关系型数据库,它的运算很快,占用空间小;SQLite不仅有SQL语法支持,独立,还有数据库的ACID事务,SQLite数据库为一种嵌入式数据库。使用数据库进行存储,这个一般数据量比较大的时候。

数据库文件会存在/data/data/<package name>/databases/目录下。

https://img1.sycdn.imooc.com/60a756e20001198701400140.jpg


https://img1.sycdn.imooc.com/60a756e20001092b07190575.jpg

Android 提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来就可以通过SQLiteDatabase对象来管理、操作数据库了。

(1)static SQLiteDatabaseopenDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags):打开path文件所代表的数据库;

(2)static SQLiteDatabaseopenOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory):打开或创建path文件所代表的数据库;

(3)execSQL(Stringsql):执行一条SQL语句;

(4)insert(Stringtable,String nullColumnHack,ContentValues values):向指定表中插入数据;

(5)update(Stringtable,ContentValues values,String whereClause,String[] whereArgs):更新指定表中的特定数据;

(6)delete(Stringtable,String whereClause,String[] whereArgs):删除指定表中的特定数据;

(7)Cursor query(Stringtable,String[] columns,String selection,String[] selectionArgs,StringgroupBy,String having,String orderBy):对指定数据表进行查询;

SQLiteOpenHelper,它是SQLiteDatabase的辅助类,通过对SQLiteDatabase内部方法的封装简化了数据库创建与版本管理的操作。SQLiteOpenHelper为抽象类,有两个要重写的方法:onCreate()和onUpgrade(),用于管理数据库的创建和升级。借助SQLiteOpenHelper类对数据库SQLite进行“增、删、改、查”操作。

数据库工具SQLite Expert Personal

应用程序数据库目录导出的db文件,可以利用数据库工具SQLite Expert Personal,方便查看以及进行操作,如下图示。当然,也可以直接用adb shell查看数据库。

https://img2.sycdn.imooc.com/60a756e20001198701400140.jpg

https://img1.sycdn.imooc.com/60a756e200016c8f09150456.jpg

4. 使用ContentProvider存储数据

ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,用于在不同应用程序之间实现数据的共享功能。像我们手机中的通讯录联系人,照片,音乐等。

5. 网络存储数

将数据上传到网络上进行存储。



猎聘

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件测试工程师
手记
粉丝
51
获赞与收藏
91

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消