继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android中数据存储,知多少?

乔Joan
关注TA
已关注
手记 40
粉丝 51
获赞 91

【一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


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

打开方式二:

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

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


http://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. 网络存储数

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



猎聘

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP