专栏首页搜狗测试Android中数据存储,知多少?

Android中数据存储,知多少?

【前言】

小编在地图项目,产品应用有各种数据,如:离线地图数据、离线语音数据、模板包、地图样式文件、收藏及历史数据等等。项目遇到应用数据相关的测试任务,小编对Android数据存储进一步学习和总结,2020我们一起努力吧!

【一. Android中数据存储】

Android的数据存储有5种方式

(1). 文件存储

(2). SharedPreference存储

(3). SQLite数据库存储

(4). 使用ContentProvider存储数据

(5). 网络存储数据

Android 应用数据文件存储路径

Android studio连接设备,利用Device File Explorer(Android Studio 3.0 工具)

进入到/data/data//files/目录下,可以看到文件了。

打开方式一:View->Tool|Windows->Device File Explorer

打开方式二:

举例:文件可导出,可删除,可上传覆盖

【二. 数据存储方式】

1. SharedPreferences存储数据

SharedPreferences数据存储,也叫作xml存储。是将数据存储 “data/data/<package name>/share_prefs”路径下的到xml文件中。

特点:

SharedPreferences数据存储方式,用来存储一些简单的信息(比如应用程序的各种配置信息),位于android.content包中,以键值对(key-value)的模式进行存储。存储的基本信息,如int,string,boolean,float和long类型。

SharedPreferences数据文件示例:

不难看出,SharedPreferences数据文件的根元素是<map…/>,该元素里每个子元素代表一个key-value对,当value是字符串类型时,使用<string…/>子元素。

获得SharedPreferences对象的方法

SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的方法获取SharedPreferences实例;

(1). 通过Context的getSharedPrerences(key, [模式])方法获取SharedPreferences对象;方法的第一个参数是用于指定SharedPreferences文件的名称,第二个参数是指定操作模式,主要有两种模式进行选择:MODE_PRIVATE, MODE_MULTI_PROCESS。默认操作是MODE_PRIVATE。(因为存在安全漏洞,Android 4.2开始不再推荐使用MODE_EORLD_READEABLE,MODE_WORLD_WRITEABLE这两种模式)。

(2). 通过Activity类提供的getPrerences(key)方法获取到SharedPreferences对象;该方法会创建一个以当前活动类名作为SharedPreferences文件名的文件。

(3). 通过PreferencesManager类中的getDefaultPreferernces()方法获得;这是一个静态的方法,他接受一个Context参数,并将当前应用程序的包名作为SharedPreferences文件名。

示例:

2. 文件存储数据

文件存储是Android中最基本的一种存储方式,和Java中实现I/O的方式,由Context类提供openFileInput()和openFileOutput()方法打开。文件存储主要分两种存储,一种是内部存储,一种是外部存储。

内部存储

内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/<package name>/files”路径下的相应文件中。

Context提供了两个方法来打开应用程序的数据文件夹里的文件IO流。

(1)files目录下读数据:FileInputStream openFileInput(String filename),打开应用程序的数据文件夹下的filename文件对应的输入流;

(2)files目录下写数据:FileOutputStream openFileOutput(String filename, int mode),打开应用程序的数据文件夹下的filename文件对应的输出流;

mode参数:打开文件的模式

(1)MODE_PRIVATE:该文件只能被当前程序读写;

(2)MODE_APPEND:以追加方式打开该文件,应用程序可再向该文件追加新的内容。

(还有MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE,这两种模式表示允许其他应用程序对我们的程序文件进行读写操作,因存在安全漏洞,Android 4.2不再推荐使用)

示例:

外部存储

外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡)。

使用外部存储要在AndroidManifext.xml中加入访问权限:

外部存储,使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。

示例

3. SQLite数据库存储数据

SQLite是一款轻量级的关系型数据库,它的运算很快,占用空间小;SQLite不仅有SQL语法支持,独立,还有数据库的ACID事务,SQLite数据库为一种嵌入式数据库。使用数据库进行存储,这个一般数据量比较大的时候。

数据库文件会存在/data/data/<package name>/databases/目录下。

Android 提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来就可以通过SQLiteDatabase对象来管理、操作数据库了。

(1)static SQLiteDatabaseopenDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags):打开path文件所代表的数据库;

(2)static SQLiteDatabaseopenOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory):打开或创建path文件所代表的数据库;

(3)execSQL(Stringsql):执行一条SQL语句;

(4)insert(Stringtable,String nullColumnHack,ContentValues values):向指定表中插入数据;

(5)update(Stringtable,ContentValues values,String whereClause,String[] whereArgs):更新指定表中的特定数据;

(6)delete(Stringtable,String whereClause,String[] whereArgs):删除指定表中的特定数据;

(7)Cursor query(Stringtable,String[] columns,String selection,String[] selectionArgs,StringgroupBy,String having,String orderBy):对指定数据表进行查询;

SQLiteOpenHelper,它是SQLiteDatabase的辅助类,通过对SQLiteDatabase内部方法的封装简化了数据库创建与版本管理的操作。SQLiteOpenHelper为抽象类,有两个要重写的方法:onCreate()和onUpgrade(),用于管理数据库的创建和升级。借助SQLiteOpenHelper类对数据库SQLite进行“增、删、改、查”操作。

数据库工具SQLite Expert Personal

应用程序数据库目录导出的db文件,可以利用数据库工具SQLite Expert Personal,方便查看以及进行操作,如下图示。当然,也可以直接用adb shell查看数据库。

4. 使用ContentProvider存储数据

ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,用于在不同应用程序之间实现数据的共享功能。像我们手机中的通讯录联系人,照片,音乐等。

5. 网络存储数据

将数据上传到网络上进行存储。

【三. 参考】

https://blog.csdn.net/to_be_designer/article/details/48272759

https://blog.csdn.net/to_be_designer/article/details/48274691

https://juejin.im/post/5b80b5adf265da43351d5eb2

https://juejin.im/post/5a5f18d06fb9a01caa209026

https://www.jianshu.com/p/b524550f4e87

欢迎添加我们的搜狗测试微信号,与我们一起聊聊测试

本文分享自微信公众号 - 搜狗测试(SogouQA)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 300行Python代码打造实用接口测试

      当然,我没好意思跟他说的是,我不会Java啊。不过最主要的原因嘛,还是因为Python的语法简洁,可以采用很少的代码量实现丰富的功能。

    用户2398817
  • Python 单元测试 & 文档测试

               raise AttributeError(r"'Dict' has no attribute %s." % key)

    用户2398817
  • Magicodes.IE编写多框架版本支持和执行单元测试

    很多情况下,我们编写了一些工具库之后,往往在某些框架版本中会出现一些问题,比如本人最近写的一个导入导出的工具库Magicodes.IE(GitHub:https...

    雪雁-心莱科技
  • 单元测试用例

    单元测试是测试的等级,其中个别单元/组件(称为单元)的最小部分被测试以确定它们是否适合使用。

    八音弦
  • Excel模板导出之导出教材订购表

    本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出。

    心莱科技雪雁
  • 深入理解JavaScript系列(33):设计模式之策略模式

    策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。

    用户4962466
  • Python进行自动化测试工具

    在自动化测试里Python用途很广,但是市面上测试工具不是很多,这里主要介绍的是一些Python测试的框架

    用户2398817
  • Python IDE介绍

    PyCharm 是 JetBrains 开发的 Python IDE。PyCharm用于一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码...

    用户2398817
  • jenkins+python持续集成

    搜索jenkins,进入官网,5分钟以内相信你能找到适合你操作系统的安装步骤。此处为省事,列出centos步骤(注意安装稳定版)

    用户2398817
  • 高级信管 | 软件测试

    软件测试可分为单元测试、集成测试、确认测试、系统测试、配置测试、回归测试等类别。_______主要用于检测软件的功能、性能、和其它特性是否与用户需求一致。

    小团子

扫码关注云+社区

领取腾讯云代金券