1、云存储、File文件存储、SharedPreference存储、SQLite存储(数据库存储)
默认保存路径:
file /data/data/包名/files/文件名
sp /data/data/包名/shared_prefs/文件名
sql /data/data/包名/databases/数据库名
2、File文件存储
在Android中写入和读取文件的方法,和 Java中实现I/O的程序是一样的,Context类中提供了
openFileInput()和openFileOutput()方法来打开数据文件里的文件IO流。下面直接通过一个demo学习
Android如何通过文件来保存数据。
存储,关键方法
String text = "text";
BufferedWriter bufferedWriter = null;
try {
//MODE_PRIVATE为默认操作模式,私有数据只能被应用本身访问,写入会覆盖原文件
//MODE_APPEND 检查是否存在,存在就在文件追加内容,否则新建
//MODE_WORLD_READABLE 可以被其他应用读取
//MODE_WORLD_WRITEABLE 可以被其他应用写入
FileOutputStream fileOutputStream = openFileOutput("data", Context.MODE_PRIVATE);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
bufferedWriter.write(text);
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
if (bufferedWriter!=null){
try {
bufferedWriter.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
读取,关键方法
FileInputStream fileInputStream=openFileInput("data");
bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
String line;
while((line=bufferedReader.readLine())!=null){
content.append(line);
}
3、SharedPreference存储
SharePreferences是一种轻型的数据存储方式,常用来存储一些简单的配置信息,如int、string、
boolean、float和long。它的本质是基于XML文件存储key-value键值对数据。
实现步骤:
(1)调用getSharedPreference()方法获取SharedPreference对象,提供两个参数,指定文件名
和操作模式
(2)调用SharedPreference对象的edit()方法获得SharedPreferences.Editor引用对象
(3)调用Edit接口的形如put某某某()方法以键值对形式保存某某某类型的数据
(4)调用Edit接口的commit()方法提交键值对。
一定注意,不用SharedPreferences对象去存储或修改数据,而是通过Editor对象。但获取数据时需要调用SharedPreferences对象的get某某某()方法了。通常使用SPUtils
4、SQLite数据库存储
SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,在存储大量复杂的关系型数
据的时可以使用,比前面学过的只适用于存储简单数据的两种存储方式要好很多。
(1)操作步骤:
先学习一个类SQLiteOpenHelper,它是SQLiteDatabase的帮助类, 用于管理数据库的创建和升
级。SQLiteOpenHelper的使用步骤:
第一步:自定义帮助类并继承SQLiteOpenHelper,并重写两个方法:onCreate()和 onUpgrade
(),分别在这两个方法中去实现创建、升级数据库的逻辑。还需要一个构造方法,这里用含有四个参
数的构造方法就可以,
第二步:创建数据库时,先实例化一个自定义的帮助类,并提供四个参数,含义是(上下文,数据库
名,创建Cursor的工厂类,版本号)。
第三步:用帮助类对象的getReadableDatabase() 和getWritableDatabase()去创建或打开一个
现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库SQLiteDatabase。
第四步:之后就可以利用得到的数据库进行增删改查的操作了。
(2)常用方法和类:
(a)execSQL()方法
这个方法非常万能,它可接受和处理SQL语句,换句话说,后面将要学习的增删改查不仅可
以用提供好的现成的辅助性方法,还可直接用原生SQL语句再调用execSQL()就够了
(b)(增加数据 insert方法)ContentValues类
实现了Parcelable内部维护了一个HashMap<String,Object>,常用它put()方法以键
值对的形式存储基本类型数据。在增和改会用到它,可以理解为键就是表中属性名,值就是
表中数据。还常用方法clear()清空所有数据,例如:
contentValues.put("name","zhangsan");
contentValues.put("age","18")......;
db.insert("student",null,contentValues)contentValues.clear();
(c)删除数据delete()
第一个参数还是表示表名,第二第三个参数用于约束删除某一行或几行的数据。比如需要删
除student表中年龄大于17的记录:
db.delete("student","age>?",new String[]{"17"});
(d)update() 方法提供四个参数,(表名,ContentValues对象,约束,约束)
(e)查询方法quary()
需要至少七个参数(table, columns, selection, selectionArgs, groupBy,
having, orderBy),含义是:(表名,要查询出的列名,查询条件子句,对应于
selection语句中占位符的值,要分组的列名,分组后过滤条件,排序方式)。(多数情况
下少数几个参数就能完成查询操作了)这个方法会返回一个Cursor,查询到的数据都会从
它取出。Cursor常用方法:moveToFirst()将指针移动到结果集的第一行;
getColumnIndex()获取某一列在表中对应位置的索引;get某某某()传入
索引以获取相应位置的某种类型的数据;close()关闭指针。例如:
Cursor cursor = db.quary("student",null,null.null,null,null,null);
if(cursor!=null){
while(cursor.moveToNext){
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"))
}
cursor.close();
}
(3)升级数据库见数据库升级小结