Android之数据存储

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值