Android应用开发中的数据存储介绍

一、常见数据存储方式
在android中,通用的数据存储归纳方式可以总结为一下几类:
文件存储:将数据存储在文件中。文件存储根据位置不同,可以存储在应用的包下,也可以存储在公共的sd上,称之为外部存储。
sharedpreference存储:将数据以键值对的形式进行存储,该种存储方式一般会存一些引用的设置信息,属于一种轻量级的存储机制。xml
sqlite数据库存储:android系统中的轻量级关系型数据,允许用户进行创建表结构,存储应用数据等操作。
使用contentprovider存储数据:在应用程序之间,共享或者传递相关信息时,往往可以使用content provider和contentresolver实现,在前文已经做过叙述,此处不再赘述。
网络获取:通过接口数据从服务器后台获取,需要网络访问
sharedpreference存储
sharedpreference是android提供的用来存储一些简单配置信息的一种机制,核心原理是:保存基于xml文件存储的key-value键值对数据。通常使用该种方式用来存储一些简单信息,例如:应用版本信息,应用主题类型等等。其采用了map数据结构来存储数据,以键值对的方式存储,可以简单的读取与写入。
主要的特点和用法总结如下所示:
sharedpreferences本身是一个接口,无法直接创建sharedpreferences实例。可以通过context提供的getsharedpreferences(string name, int mode)方法来获取sharedpreferences实例,第一个参数表示要操作的xml文件名,第二个参数表示操作模式:mode_private、mode_world_readable、mode_world_writeable,推荐使用mode_private。
editor:sharedpreferences只能获取数据,不能存储和修改。存储修改是通过sharedpreferences.edit()获取的内部接口editor对象实现。
sharedpreferences对应的xml文件位置:/data/data/package name/shared_prefs/
文件存储
内部存储
核心原理:上下文context提供了很多方法来打开数据文件里的文件,常用的api如下:
getdir(string name,int mode):内部存储根目录下的文件夹,如果不存在则会新建。该目录的位置是data/data/《包名》/。
getfilesdir():返回报名目录下的文件夹,对应的目录依然是data/data/《包名》/files/
filelist():列举文件和文件夹,对应的目录是data/data/《包名》/files/
openfileinput(string name):打开文件输入流(不存在则抛出filenotfoundexception)
openfileout(string name,int mode):打开文件输出流(文件不存在则新建)
deletefile(string name):删除文件或文件夹
总结,以上这些context提供的关于目录和文件的操作,均是在data/dat/包名及其目录下进行操作的。
缓存
getcachedir:获取应用的缓存文件夹,缓存文件夹的目录位置是:data/data/包名/cache/
getcodecachedir:存放优化过的代码,比如jit优化
文件访问模式
mode_private:只对在应用内可见,使用最多的就是这种模式。
mode_append:如果文件存在,则在文件末尾追加;文件不存在,则与 mode_private 相同。
mode_world_readable和mode_world_writeable:允许其他应用访问,但是在api17版本已经被弃用,不在推荐使用,从api版本24开始,禁止使用这两种常量模式。
外部存储
除了内部存储空间可以存储内容外,在移动设备商,均带有外部存储介质,即外部存储(如sd卡)。但是随着设备内置存储空间增大,很多设备已经足以将内置存储空间一分为二,一块为内部存储,一块为外部存储。使用外部存储有两个点需要注意:
需要检测外部存储介质是否已经挂载
外部存储的空间,所有的应用都可以访问并执行读写操作。
声明读写权限:write_external_storage、read_external_storage,从api19开始,已经不再需要声明读写权限。
外部存储空间可以分为两个部分,私有目录和公共目录
私有目录(private)
私有目录(private)对应的存储路径是storage/emulated/0/android/,私有目录的特点是:
每个应用独占以包名命名的私有文件夹
这些私有文件夹在应用卸载时被删除
适合使用的场景是:非私密数据,需要随应用卸载而删除的一些数据
私有目录的路径是storage/emulated/0/android/data/《包名》/,系统提供的主要api包括:
getexternalcachedir:cache文件夹
getexternalcachedirs:多部分cache文件夹
getexternalfilesdir:files文件夹
getexternalfilesdirs:多部分files文件夹
getexternalmediadirs:多媒体文件夹
公共目录(public)
在外部存储介质中,除了私有目录外,还有一些公共的目录。这些公共目录:
所有应用共享
在应用卸载时不会被删除
适用于非私密的数据,不需要随应用卸载删除
公共目录的存储路径是storage/emulated/0/,系统提供的主要的api包括:
getexternalstoragedirectory:外部存储根目录
getexternalstoragepublicdirectory:外部存储根目录下的文件夹
getexternalstoragestate:外部存储状态
sqlite数据库
sqlite 一个非常流行的嵌入式数据库,它支持 sql 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((mozilla, php, python)都使用了 sqlite。
android 在运行时(run-time)集成了 sqlite,所以每个 android 应用程序都可以使用 sqlite 数据库。对于熟悉 sql 的开发人员来时,在 android 开发中使用 sqlite非常简单。
存储路径
数据库存储在 data/包名/databases/ 下。
创建数据库
android 不自动提供数据库。在 android 应用程序中使用 sqlite,必须自己创建数据库,数据表、索引等内容。
sqliteopenhelper
android 提供了 sqliteopenhelper 帮助开发者创建一个数据库,只要继承 sqliteopenhelper 类即可。sqliteopenhelper 类根据需要,封装了创建和更新数据库使用的逻辑。sqliteopenhelper 的子类,至少需要实现三个方法:
构造函数:调用父类 sqliteopenhelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 activity),数据库名字,一个可选的游标工厂(通常是 null),一个代表你正在使用的数据库模型版本的整数。
oncreate方法:该方法需要一个 sqlitedatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onupgrage方法:该方法需要三个参数,一个 sqlitedatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。


iQOO熔岩橙高清图赏
jesd204b协议相关知识介绍
接口静电保护器件二极管,12V如何选型号
英国还是用了华为5G,特朗普怒了
U 设计周 x NVIDIA Omniverse:元宇宙设计大赛,邀 3D 设计师一起创造未来!
Android应用开发中的数据存储介绍
激光镭雕技术在吉利汽车上的应用
翠展微宣布完成近亿元A轮融资 用于新建车规级IGBT模块产线
开放原子开源基金会理事长孙文龙一行赴山东大学考察交流
仅售1999!看完了这些优点,华为荣耀8还是值得入手的
浪潮信息联合国际权威机构IDC发布《2020全球计算力指数评估报告》
液晶屏拼接的工作原理和应用阐述
骨传导耳机伤耳朵吗?骨传导耳机好不好?
Android Wear手表买什么好?市面最佳Android Wear智能手表推荐
为什么纸牌游戏Hanabi是人工智能的下一个挑战?
oled拼接屏在清远有哪些常见应用领域?
为解决地下石油管道监测问题,研制红外航空遥感监测系统
并联PET负荷分配控制及负载动态过程的Matlab仿真研究
固态电池技术赛道预热 各厂商纷纷加速布局
如何对别墅住宅中的衣帽间进行智能化设计