Android之数据存储
Android中实现数据存储的三种方式:
- 文件存储
- SharedPreference存储
- SQLite数据库存储
三种方式的数据文件默认存储的位置:
文件存储
- 应用运行时需要的一些较大的数据/图片可以用文件保存到手机内部
- 文件类型:任意
- 文件存储的位置:/data/data/包名/files/
- 可以设置数据只能当前应用读取,别的应用不可以
- 应用卸载时,文件会被删除
相关API
读取/data/data/包名/files/中的文件:
FileInputStream fis = this.openFileInput(“文件名”);
保存文件到/data/data/包名/files/中:
FileOutputStream fos = this.openFileOutput(“指定要保存的文件名”,int mode);
得到files文件夹对象:
File filesDir = this.getFilesDir();
保存文件
将assets下的bg.png文件复制保存到手机内部
//得到assets下的bg.png文件的InputStream
AssetManager manager = this.getAssets();
InputStream is = manager.open("bg.png");
//得到files下的bg.png文件的输出流
FileOutputStream fos = openFileOutput("bg.png",Context.MODE_PRIVATE);
//边读边写
byte[] buffer = new byte[1024];
int len = -1;
while((len=is.read(buffer))!=-1){
fos.write(buffer,0,len);
}
is.close();
fos.close();
//保存完成
读取文件
读取files下的bg.png文件,并加载图片文件。
//获取文件的输入流
InputStream is = (InputStream) this.openFileInput("bg.png");
//将输入流解析为bitmap
Bitmap bitmap = BitmapFactory.decodeStream(is);
//显示bitmap
((ImageView)findViewById(R.id.imageView)).setImageBitmap(bitmap);
is.close();
//写法二
//获取files文件夹
File filesDir = this.getFilesDir();
//获取文件的绝对路径
String filePath = filesDir.getAbsolutePath()+"/bg.png";
//解析与显示
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
((ImageView)findViewById(R.id.imageView)).setImageBitmap(bitmap);
SharedPrefrence存储
SP存储专门用来存储一些单一的小数据,例如一些基本数据类型数据
- 存储数据类型:boolean,float,int,long,String
- 数据保存的路径:/data/data/包名/shared_prefs/xxx.xml
可以设置数据只能是当前应用读取,别的应用不可以读取,应用卸载时会删除保存数据的xml文件
相关API
获取SharedPrefrence实例
SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数如下:
-
Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。
-
Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。
-
Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写
从SP文件中得到相关数据:
SharedPreferences .getXxx(String key, Xxx defaultname);
更新SP文件内容的接口:Editor
-
获取SharedPreferences的Editor对象: SharedPreferences editor();
-
SharedPreferences.Editor clear():清空SharedPreferences里所有数据
-
SharedPreferences.Editor putXxx(String key , xxx value): 向SP存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据
-
SharedPreferences.Editor remove(): 删除SharedPreferences中指定key对应的数据项
-
boolean commit(): 当Editor编辑完成后,使用该方法提交修改才可以真正地把修改后的内容保存到文件中。
读写其他应用程序的SharedPreferences(跨应用读取数据)
// 1. 创建其他应用程序对应的Context:
Context otherContext = this.createPackageContext("其他应用程序的包名", Context.CONTEXT_IGNORE_SECURITY);
// 2.获取对应的SharedPreferences对象,注意相应的mode
SharedPreferences sharedPreferences
= otherContext.getSharedPreferences("相关的xml文件名", Context.MODE_WORLD_READABLE);
//3.获取SP对象成功之后,可实现对应的读/写操作。
...
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。