美文网首页
Android数据存储五种

Android数据存储五种

作者: 悠悠我心_4a00 | 来源:发表于2018-07-19 16:04 被阅读0次

    1 使用SharedPreferences存储数据

    2 文件存储数据

    3 SQLite数据库存储数据

    4 使用ContentProvider存储数据

    5 网络存储数据

    1.1.SharedPreferences存储:

    应用场景

    适用于存储一些键值对,一般用来存储配置信息。

    存储位置:

    /data/data/包名/shared_prefs 目录下,以xml格式进行保存。

    可存储的数据类型:

    boolean float int long string

    存储步骤:

    1.根据上下文获取SharedPreferences对象。

    2.利用edit()方法获取Editor对象。

    3.通过Editor对象来存储key-value键值对数据。

    4.通过commit()方法提交数据。

    好处:

    SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。

    弊端:

    1.只能存储五种简单的数据类型

    2.无法进行条件查询

    1.2.文件存储:

    应用场景:

    存储一些简单的文本数据或者二进制数据

    存储在内存:

    当应用安装到Android后,系统会根据每个应用的包名创建一个/data/data/包名/的文件夹,默认是私有的。

    注意:如果直接File file = new File(“info.txt”);

    这样就报文件找不到的异常,因为这样写会被创建到手机内部存储的根目录里面,但是内部存储根目录是只读不可写的。

    优化:File file = new File(getFileDir,”info.txt”);

    目录:

    /data/data/<包名>/files/info.txt--->getFileDir()+”info.txt”

    权限:

    访问自己包名下的目录是不需要权限

    方便api:

    getCacheDir(); //方法用于获取/data/data/cache目录,缓存目录,当存储空间不足,系统会自动将之清除。

    getFilesDir(); //方法用于获取/data/data/files目录,保存重要的数据信息

    存储在sd卡:

    目录:

    mnt/sdcard/info.txt--->Envitonment.getExternalStorageState()+”info.txt”

    权限:

    方便api:

    获取SD卡根目录

    Environment.getExternalStorageDirectory()

    获取SD卡的挂载状态

    Environment.getExternalStorageState()

    获取SD卡可用空间大小

    Environment.getExternalStorageDirectory().getFreeSpace()

    文件的权限

    应用程序在data/data/<自己包名>/目录下创建的文件默认都是私有的,别的程序是不能访问的

    在模拟器中我们能再看这个目录并导到桌面上打开,但是注意真实手机没有root权限,所以你根本打不开这个目录。

    创建有权限的文件:

    openFileOutput(“info.txt”,mode);

    mode是文件访问权限:

    Context.MODE_PRIVATE=0:默认为私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。

    Context.MODE_APPEND=32768:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

    MODE_WORLD_READABLE=1:表示当前文件可以被其他应用读取;

    MODE_WORLD_WRITEABLE=2:表示当前文件可以被其他应用写入。

    1.3.SQLite数据库存储

    定义:

    SQLiteOpenHelper是 Android 提供的一个抽象工具类,负责管理数据库的创建、打开、升级工作。如果我们想创建数据库,就需要自定义一个类继承 SQLiteOpenHelper,然后重写其中的抽象方法

    应用场景:

    适用于存储一些复杂的关系型数据。

    存储位置:

    data/<项目文件夹>/databases/下。

    好处:

       支持SQL语言

             效率高,利用很少的内存就有很好的性能

    十分适合存储结构化数据

       方便在不同的Activity,甚至不同的应用之间传递数据

    1.4.ContentProvider存储

    理解

    一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。 

    Android提供了一些已经在系统中实现的标准Content Provider,比如联系人信息,图片库等等,你可以用这些Content

    Provider来访问设备上存储的联系人信息,图片等等。

    示例Uri:

    content://media/internal/images这个URI将返回设备上存储的所有图片

    content://contacts/people/这个URI将返回设备上的所有联系人信息

    content://contacts/people/45这个URI返回单个结果(联系人信息中ID为45的联系人记录)

    这种查询字符串格式有点令人迷惑。为此,Android提供一系列的帮助类(在android.provider包下),里面包含了很多以类变量形式给出的查询字符串,这种方式更容易让我们理解一点,参见下例:

    MediaStore.Images.Media.INTERNAL_CONTENT_URI

    Contacts.People.CONTENT_URI

    因此,如上面content://contacts/people/45这个URI就可以写成如下形式:

    Uri person = ContentUris.withAppendedId(People.CONTENT_URI, 45);

    然后执行数据查询: Cursor cur = managedQuery(person, null, null, null);

    应用场景:

    增删改查其他应用程序中私有数据。

    Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。

    创建内容提供者编写的流程:

    1.写一个类继承ContentProvider,实现增删改查的方法,声明uriMatcher匹配规则,来检查uri路径是否正确

    2.清单文件配置:

    android:name="com.bank.BankDBBackdoor"

    android:authorities="com.bank.db"

    android:exported="true" />

    3.在另一个程序里面通过contentResolver增删改查

    1.5.网络存储

    应用场景:

    存储比较重要的数据,比如支付宝账号密码等等

    可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。

    权限:

    相关文章

      网友评论

          本文标题:Android数据存储五种

          本文链接:https://www.haomeiwen.com/subject/sgptmftx.html