Android的数据存储形式

来源:互联网 发布:js实现可视化拖拽控件 编辑:程序博客网 时间:2024/05/17 00:00

①.数据库存储,SQLite:
②.SharedPreference存储:—>xml文件.
③.内部存储:
④.外部存储:
⑤.网络存储:

● SQLite:SQLite是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式。 Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的api。
getReadableDatabase()和getWritableDatabase()的区别
两者的区别?
当碰见一些问题时,比如,磁盘空间不足,或者明确要求创建一个只读数据库,那么,二者就不一样,db.getReadableDatabase();创建的就是一个只读数据库,当这些问题解决时,二者又会变一样了。
● SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。
内部就是一个map结构.只能存储一些基本的数据常见的数据类型,比如
int,String,boolean,float,long,String,Set等.
使用场景:比如一个小游戏,要保存关卡数等.
具体用法示例:
获取SharedPreference对象:
//name:xml文件的文件名;mode:模式,操作该文件的权限.—->”纸”
SharedPreferences sp = getSharedPreferences(“config”, MODE_PRIVATE);
//得到Editor对象
Editor editor=sp.edit();
//存储信息:
editor.putXXX();
//保存信息:
editor.commit();
//或者:
editor.apply();
取信息:
sp.getAll()—>Map…
sp.getXXX();
sp.clear();—->全部清空.
sp.remove(key)—>
sp.contains(key);
//注册监听:
sp.registerOnSharedPreferenceChangeListener(mListener);
//取消监听:
sp.unregisterOnSharedPreferenceChangeListener(mListener);
● File: 即常说的文件(I/O)存储方法,常用于存储大数量的数据,但是缺点是更新数据将是一件困难的事情
内部存储:
内部和外部的区分不是以ROM和SD卡来分的,而是以App来分的.
如果该文件属于App私有的,仅能够被App本身来访问,他就是内部存储的;否则就是外部的.

区别:
①.概念不同;
②.内部存储不需要添加任何权限,外部存储则需要;
③.内部存储的文件会随着App的卸载而被删除掉;外部存储一般不会.
④.存储位置:内部存储一般在/data/data/包名/…;
外部存储存储位置比较灵活,可以灵活指定位置.
存储位置:
/data/data/包名/files/…..
①.存储文件:
FileOutputStream out=openFileOutput(name,mode);
②.打开文件:
FileInputStream in =openFileInput(name);
③.删除文件:
boolean flag=deleteFile(name);
④.列出files目录下所有的文件名称:
String[] fileNames=fileList();

外部存储:
把文件存到设备的主要的存储空间中—->SD卡.
判断SD是否可用:
Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
获取SD卡根目录:
Environment.getExternalStorageDirectory().getAbsolutePath();
怎么计算SD卡大小?
//获取某个文件的大小.
StatFs stat = new StatFs(getSDPath());
//判断API的版本.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
//获取总大小的方法
// stat.getTotalBytes();
//机械硬盘—->盘片—>扇区
//磁道;机械臂;
//获取块的数量
//int blockCount = stat.getBlockCount();
long blockCount = stat.getBlockCountLong();
//获取块的大小
//int blockSize = stat.getBlockSize();
long blockSize = stat.getBlockSizeLong();
return blockCount * blockSize / 1024 / 1024;
}
关于SD卡的相关权限:

<!--从4.4之后,如果只是要单纯的获取SD卡的路径,不往里读写信息,就不需要添加权限--><!--从6.0开始,对权限严格控制了!从6.0以后,该权限必须经过用户同意授权.--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>--><!--挂载与解除挂载sd卡的权限,现在已经不需要了.--><!--<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>-->

● ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。

0 0
原创粉丝点击