`
zhanglfat
  • 浏览: 91430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 5种方式存储数据:

 
阅读更多
Android 提供了5种方式存储数据:
--使用SharedPreferences存储数据;
--文件存储数据;
--SQLite数据库存储数据;
--使用ContentProvider存储数据;
--网络存储数据;

先 说下,Preference,File, DataBase这三种方式分别对应的目录是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。

在Android中通常使用File存储方式是用 Context.openFileOutput(String fileName, int mode)和Context.openFileInput(String fileName)。
Context.openFileOutput(String fileName, int mode)生成的文件自动存储在/data/data/Package Name/files目录下,其全路径是/data/data/Package Name/files/fileName 。注意下,这里的参数fileName不可以包含路径分割符(如"/")。
通常来说,这种方式生成的文件只能在这个apk内访问。但这个结论是指使用Context.openFileInput(String fileName)的方式。使用这种方式,每个apk只可以访问自己的/data/data/Package Name/files目录下的文件,原因很简单,参数fileName中不可以包含路径分割符,Android会自动在/data/data /Package Name/files目录下寻找文件名为fileName的文件。

一:使用SharedPreferences存储数据

首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简 单的读取与写入,具体实例如下:
void ReadSharedPreferences(){
String strName,strPassword;
SharedPreferences   user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
void WriteSharedPreferences(String strName,String strPassword){
SharedPreferences   user = getSharedPreferences(“user_info”,0);
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
}
数据读取与写入的方法都非常简单,只是在写入的时候有些区别:先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改 的数据。实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。以上面的数据存储结果为例,打开后可以看到一个user_info.xml的文件,打开后可以看到:
<?xml version=”1.0″ encoding=”UTF-8″?>
<map>
<string name=”NAME”>moandroid</string>
<string name=” PASSWORD”>SharedPreferences</string>
</map>
使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。

二:文件存 储数据



文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与 Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。 FilterInputStream, FilterOutputStream等可以到Java io package说明中去详细学习,不再此详细说明,具体实例如下:
String fn = “moandroid.log”;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);
除此之外,Android还提供了其他函数来操作文件,详细说明请阅读Android SDK。


三:网络存储数据


网络存储方式,需要与Android 网络数据包打交道,关于Android 网络数据包的详细说明,请阅读Android SDK引用了Java SDK的哪些package?。

四:ContentProvider

1、ContentProvider简介


当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数 据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数 据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。?

2、Uri类简介


Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。


2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。


3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
? 要操作contact表中id为10的记录,可以构建这样的路径:/contact/10
? 要操作contact表中id为10的记录的name字段, contact/10/name
? 要操作contact表中的所有记录,可以构建这样的路径:/contact?
要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:
要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
3、UriMatcher、ContentUrist和ContentResolver简介

因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从 Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。
? UriMatcher:用于匹配Uri,它的用法如下:


1.首先把你需要匹配Uri路径全部给注册上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider /contact路径,返回匹配码为1
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路径,返 回匹配码为2
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#号为通配符

2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用 addURI()方法传入的第三个参数,假设匹配 content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回的匹配 码为1。
?
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
? withAppendedId(uri, id)用于为路径加上ID部分
? parseId(uri)方法用于从路径中获取ID部分
? ContentResolver:当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用 ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。

五:总结说明


以上5中存储方式,在以后的开发过程中,根据设计目标、性能需求、空间需求等找到 合适的数据存储方式。Android 中的数据存储都是私有的,其他应用程序都是无法访问的,除非通过ContentResolver获取其他程序共享的数据。采用文件方式对外共享数据,需要 进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。
分享到:
评论

相关推荐

    Android开发:Android Studio:数据存储方式:SharedPreferences与SQLite数据库.pdf

    Android开发:Android Studio:数据存储方式:SharedPreferences与SQLite数据库.pdf

    android五种数据存储方式

    Android提供了五种主要的数据存储方式:共享首选项(SharedPreferences)、内部存储(Internal Storage)、外部存储(External Storage)、SQLite数据库和Content Provider。下面将详细介绍这五种存储方式。 1. **...

    android数据存储的四种方式

    本文将详细介绍Android中的四种主要数据存储方式:SharedPreferences、File、SQLite数据库以及网络存储。 1. SharedPreferences: SharedPreferences是Android提供的一种轻量级的数据存储方式,适合存储用户偏好...

    android 数据存储的几种方式

    SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储简单的键值对数据,如int、long、boolean、String、float等基本数据类型。它类似于HashMap,但限制了只能存储基本类型。SharedPreferences...

    Android开发之数据存储的四种方式之一:Network存储

    在上一篇《Android开发之数据存储的四种方式之一:SharedPreferences》中介绍了SharedPreferences存储本地数据的应用,在这个案例里,封装了HttpURLConnection请求、HttpClient请求和AsyncHttpClient请求,将需要...

    Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储)

    本教程将详细介绍Android中的三种主要数据存储方式:SharedPreferences存储、内部文件存储以及数据库存储。 1. SharedPreferences存储 SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存应用...

    Android实现数据存储技术

    Android 平台中实现数据存储的五种方式分别是:使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据和网络存储数据。 使用 SharedPreferences 存储数据 ...

    android 三种存储方式

    在Android开发中,数据存储是不可或缺的一部分,它涵盖了多种方式以适应不同的应用场景。本文将详细介绍Android的三种主要存储方式:数据库存储(以DBFlow为例),SharedPreferences存储,以及内外存文件的存储。 ...

    Android数据持久化之二:SharedPreferences 存储

    Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、SharedPreference 存储 3、数据库存储。SharedPreferences 是使用键值对的方式来存储数据的,使用 SharedPreferences来进行数据...

    四种Android数据存储方式

    Android系统提供了四种主要的数据存储方式,分别是SharedPreference、SQLite、File和ContentProvider。下面我们将详细探讨这些方法。 **1. SharedPreference** SharedPreference是Android中最简单、最常用的轻量级...

    android数据存储方式大全

    Android提供了多种数据存储方式,每种都有其特定的用途和适用场景。以下是Android数据存储的主要方式的详细说明: 1. **SharedPreferences** SharedPreferences提供了一个轻量级的存储机制,用于存储键值对,通常...

    Android学习之数据存储

    在Android中,有多种方式来实现数据存储,包括: 1. **SharedPreferences**:这是一种轻量级的数据存储方法,常用于保存应用的配置设置。它基于键值对的形式,支持基本数据类型如布尔、整数、浮点数、字符串等。...

    Android四种存储方式

    Android提供了四种主要的数据存储方式:SharedPreferences、文件存储、SQLite数据库和ContentProvider。让我们逐一深入探讨这些方法。 1. **SharedPreferences** SharedPreferences提供了一个轻量级的存储方案,...

    Android数据储存

    一、Android数据存储方式 1. SharedPreferences:适用于存储少量的键值对数据,如用户设置。它是一种轻量级的存储方案,数据以XML格式存储在磁盘上,易于读写。 2. 文件存储:可以创建自定义格式的文件来保存数据...

    Caused by: android.system.ErrnoException: write failed: ENOSPC (

    - 如果应用程序的主要数据可以保存在外部存储(如SD卡),则优先考虑这种方式。 - 这样既可以减轻内部存储的压力,也可以让用户根据需要自由管理存储空间。 5. **优化数据结构**: - 对于大数据量的应用程序,...

    Android数据存储SQLite.docx

    内部文件存储是 Android 中的一种数据存储方式,它可以存储应用程序中的文件数据。内部文件存储的优点是可以存储大量数据,缺点是存储空间有限。内部文件存储的使用方法是通过 openFileOutput() 方法来创建文件,并...

    老罗android视频开发源码和ppt--android存储数据和文件.rar

    "老罗android视频开发源码和ppt--android存储数据和文件.rar"这个压缩包提供的是关于Android数据存储和文件操作的教学资源,包括视频课程和PPT讲义,由知名的Android讲师罗升阳(老罗)编撰。 首先,我们来看一下...

    Android学习之数据存储.zip

    下面将详细探讨Android中的几种数据存储方式及其应用场景。 1. **Shared Preferences** Shared Preferences是Android中最简单的数据存储方式,用于保存键值对数据,通常用于存储用户的偏好设置。它提供了XML格式的...

    android之存储数据的四大方式

    在Android系统中,存储数据的方式主要有四种:内部存储、外部存储、SQLite数据库和SharedPreferences。这四种方式各有特点,适用于不同的应用场景。以下是对这四大存储方式的详细解释。 1. **内部存储** 内部存储...

Global site tag (gtag.js) - Google Analytics