前言
学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的。我们聊QQ,聊微信,看新闻,刷朋友圈等都是看里面的数据,所以在Android中数据对我们是多么重要。
数据,如今是数据大时代,谁拥有数据,谁就能掌握未来,这一点很可怕的,现在你用的手机APP中存在着你的大量数据信息,大数据的积累可以掌握出你的作息时间,生活规律等。
对数据的存储有着良好的技术支持,是一个好的开发平台的体现,如果不能长时间保持数据,那么必然会被时代发展所淘汰。那么有长期保持数据的概念,就有瞬时数据这一概念的出现,什么是瞬时数据呢?
见名知意,瞬时代表一瞬间,指当存储的数据因程序关闭或其他原因等导致数据丢失,如果你想发个自拍发个朋友圈,可是一刷新就没了,是不是很恼怒呢?气不气,气不气,是不是想砸手机?
本篇主要介绍Android中实现数据存储的三种方式:
- 文件存储
- SharedPreference存储
- SQLite数据库存储
下面给出三种方式的数据文件默认存储的位置:
在DDMS里的File Explore下打开data文件夹,切换到DDMS视图,点击FileExplorer切换卡,进入到/data/data/
DDMS文件的导出
好了,接下来分析数据存储方式了。如上图为文件存储位置,接下讲第一个文件存储。然后再接着讲SharedPreferences存储和SQLite数据库存储。
文件存储
文件存储是Android中最基本的一种存储方式,和Java中实现I/O的方式,由Context类提供openFileInput()和openFileOutput()方法打开。文件存储主要分两种存储,一种是内部存储,一种是外部存储。
内存存储:使用了FileInputStream类中的openFileInput()方法,用于读取数据;使用了FileOutputStream类中的openFileOutput()方法,用于写入数据。
外部存储:使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。
简化:
FileOutputStream -> openFileOutput()
FileInputStream -> openFileInput()
Environment -> getExternalStorageDirectory()
一,内部存储的写入文件步骤
第一,
获取文件输出流对象 FileOutputStream
第二,
使用FileOutputStream类的openFileOutput(String name, int mode)方法
第三,
调用FileOutputStream对象的write()方法写入文件
第四,
调用flush()方法,因为write()方法是写入缓冲区的,调用flush()方法将缓冲中的数据写入到文件,清空缓存
第五,
close()方法用于关闭FileOutputStream
二,内部存储的读取文件步骤
第一,
获取文件输入流对象 FileInputStream
第二,
使用FileInputStream类的openFileInput()方法来实现
第三,
调用FileInputStream对象的read()方法
第四,
调用close()关闭文件输入流对象
如上分别描述了内部存储的写入文件步骤和读取文件步骤,那么接下来代码例子展示一下这些步骤。
写入数据
在openFileOutput()方法中,接收两个参数,一个是文件名,另一个是文件的操作模式,主要有两种为 MODE_PRIVATE和MODE_APPEND。最后openFileOutput()方法会抛出FileNotFoundException。
主要代码步骤:
读取数据
读取文件内容的使用代码:
综上,在Android中读取与写入文件的方法,和Java中实现I/O的程序是一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。通过Context.openFileOutput()获取输出流,参数分别为文件名和存储模式;通过Context.openFileInput()获取输入流,参数为文件名。
介绍了内部存储,现在介绍外部存储。
外部存储的文件时全局都是可以读的,在程序中,使用Environment类的getExternalStorageDirectory方法,来读取外部文件。
最后外部存储文件,要加入读取与写入的权限,添加
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
这样文件存储就讲得差不多了,多练习试试。对于SharePreferences存储和SQLite存储,现在进入讲解。
下面对SharedPreferences存储介绍:
SharedPreferences是一种数据存储方式,用来存储一些简单的信息,位于android.content包中,以键值对的模式进行存储,键值对(key-value)。对于存储的基本信息,如int,string,boolean,float和long。
- 使用getSharedPreferences()方法获取
- 使用getPreferences()方法获取
实现SharedPreferences存储步骤:
第一,
调用SharedPreferences类的edit()方法,获取SharedPreferences.Editor对象
第二,
调用一个SharedPreferences.Editor对象的putXXX()的方法获取数据
第三,
使用commit()方法提交数据
在这里介绍完文件存储和SharedPreferences,接下来讲SQLite数据库存储。但是除了这三个,还有几种存储方式。如图:
接下来讲讲Android中SQLite数据库的增删改查的操作。
SQLite数据库存储
SQLite是一款轻量级的关系型数据库,它的运算很快,占用空间小,SQLite不仅有SQL语法支持,独立,还有数据库的ACID事务,SQLite数据库为一种嵌入式数据库。
SQLiteOpenHelper类,它是SQLiteDatabase的帮助类,用于管理数据库的创建和升级,SQLiteOpenHelper类为抽象类,有两个要重写的方法:onCreate()和onUpgrade(),用于去实现创建和升级数据库。
在SQLiteOpenHelper类中还需要一个构造方法,这个方法接收四个参数,分别为Context context,String name, CursorFactory factory,int version这四个。第一个是参数context,第二个是数据库名,第三个是自定义Cursor,一般为null,第四个为当前的数据库版本号。
在SQLiteOpenHelper类中有两个重要的实例方法,为getReadableDatabase()和getWritableDatabase()这两个方法。调用这其中的方法就能够创建数据库了。如果存在数据库就打开,没有就创建。
SQLiteOpenHelper类是一个SQLite帮助类,实现SQLite的数据操作,创建一个类去继承SQLiteOpenHelper,接下来代码示例一下。
接下来增加数据
如何增加数据,用put()方法即可,在SQLiteDatabase中提供insert()方法,接下来也讲解一下。
删除数据
用到的方法是delete(),第一个参数为表名,第二三位用于约束。
更新数据
用到的方法是update()方法,参数分别为表名,ContentValues对象,约束,约束,好了,接下来示例一下。
查询数据
用到的方法为query(),这个方法至少需要七个参数(table, columns, selection, selectionArgs, groupBy, having, orderBy),分别为表名,要查询出的名,查询条件语句,对应于selection语句中占位符的值,要分组的列名,分组后过滤条件语句,排序方式。
升级数据库
用到onUpdate()方法,分别删除表,再次在此方法里创建即可。
代码:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private static Integer Version = 1;
//构造函数
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
//必须调用父类当中的构造函数
super(context, name, factory, version);
}
//context:上下文对象
//name:数据库名称
//param:factory
//version:当前数据库的版本
public MySQLiteOpenHelper(Context context,String name,int version){
this(context,name,null,version);
}
public MySQLiteOpenHelper(Context context,String name){
this(context, name, Version);
}
//创建的时候被调用
@Override
public void onCreate(SQLiteDatabase db) {
//创建了数据库并创建一个的表
String sql = "create table sut(id int primary key,name varchar(200))";
db.execSQL(sql);
}
//数据库升级时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("更新版本为:"+newVersion);
}
}
结语
- Android存储技术知识点就介绍到这了,一起努力吧~
?