【一. Android中数据存储】
(1). 文件存储
(2). SharedPreference存储
(3). SQLite数据库存储
(4). 使用ContentProvider存储数据
(5). 网络存储数据
Android studio连接设备,利用Device File Explorer(Android Studio 3.0 工具)
进入到/data/data//files/目录下,可以看到文件了。
打开方式一:View->Tool|Windows->Device File Explorer
打开方式二:
举例:文件可导出,可删除,可上传覆盖
【二. 数据存储方式】
1. SharedPreferences存储数据
SharedPreferences数据存储,也叫作xml存储。是将数据存储 “data/data/<package name>/share_prefs”路径下的到xml文件中。
SharedPreferences数据文件示例:
不难看出,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文件名。
文件存储是Android中最基本的一种存储方式,和Java中实现I/O的方式,由Context类提供openFileInput()和openFileOutput()方法打开。文件存储主要分两种存储,一种是内部存储,一种是外部存储。
内部存储
内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/<package name>/files”路径下的相应文件中。
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不再推荐使用)
示例:
外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡)。
使用外部存储要在AndroidManifext.xml中加入访问权限:
外部存储,使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。
示例
SQLite是一款轻量级的关系型数据库,它的运算很快,占用空间小;SQLite不仅有SQL语法支持,独立,还有数据库的ACID事务,SQLite数据库为一种嵌入式数据库。使用数据库进行存储,这个一般数据量比较大的时候。
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查看数据库。
ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,用于在不同应用程序之间实现数据的共享功能。像我们手机中的通讯录联系人,照片,音乐等。
将数据上传到网络上进行存储。