总共四种:SharedPreferences,文件存储,SQLite数据库,ContentProvider,网络存储

1.sharedPreferences:适合存储少量数据,而且存取的格式简单,采用Map数据结构来存储数据,以键值对的形式存储

存储文件到:/data/data/<package-name>/shared-prefs

注意:只能在同一个包内使用

2.文件存储:可以存储大量的数据,但是更新数据困难,存取类型复杂的数据时,需要让实体类实现Serializable接口(不能是Parcelabel接口),

存储文件到:/data/data/<package-name>/files或者是任意路径下

3. SQLite数据库:专为嵌入式设备设计的轻型数据库,只有五种数据类型,分别是:
NULL: 空值
INTEGER: 整数
REAL: 浮点数
TEXT: 字符串
BLOB: 二进制数据

存储文件到:/data/data/<package-name>/database

4. ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式

5. 网络存储 网络存储方式,需要与Android 网络数据包打交道

SharedPreferences

存:

SharedPreferences sharedPreferences =getShardPreference(filename,Mode);//filename 文件名称,不用加后缀.xml,系统会自动添加

SharedPreferences.Editor editor=sharePreferences.edit();  //获取eidtor对象

editor.putString("name","zhangxiao");//写入数据

editor.commit();//提交数据

取:

SharedPreferences sharedPreferences=getSharedPreferences(filename,Mode);

sharedPreferences.getString("name",defaultValue);//第二个参数是默认值

文件存储

存:

FileOutputStream fos=openFileOutput(filename,Mode);    文件存储在/data/data/package-name/files下,filename不可以包含“/”,该文件只可以被该APP访问 ;

Mode包含4种:
Context.MODE_PRIVATE          //文件只能被本应用使用,新建模式
Context.MODE_APPEND           //追加模式
Context.MODE_WORLD_READABLE   //可以被其他应用读取
Context.MODE_WORLD_WRITEABLE  //可以被其他应用写入

或者是File file=new File(Environment.getStroageDictionary().getAbsolutePath()+"/filename");  文件存储在filename里,可以是任意路径,filename可以包含任意字符;要在AndroidManifest中添加权限

FileOutputStream fos=new FileOutputStream(file);

ObjectOutputStream oos=new ObjectOutputStream(fos);

oos.writeObject(list);

注意:使用完后记得关闭---fos.close();      oos.close();

取:

FileInputStream fis=openFileInput(filename);

或者是File file=new File(..同上..);

FileInputStream fis=new FileInputStream(file);

ObjectInputStream ois=new ObjectInputStream(fis);

List <***> list=(ArrayList<***>)ois.readObject();

注意:使用完以后记得关闭---fis.close();      ois.close();

SQLite数据库

具体内容见SQLite数据库详析

ContentProvider

一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制。并且此种方式忽略了底层的数据存储实现,ContentProvider提供了一种统一的通过Uri实现数据操作的方式。其步骤为:
  1. 在当前应用程序中定义一个ContentProvider。
  2. 在当前应用程序的AndroidManifest.xml中注册此ContentProvider,其中authorities属性定义了此ContentProvider的Uri标识。
<provider android:name=".MyProvider" android:authorities="com.test.MyProvider"/>
  3. 其他应用程序通过ContentResolver和Uri来获取此ContentProvider的数据。
ContentResolver提供了诸如insert(), delete(), query()和update()之类的方法。用于实现对ContentProvider中数据的存取操作。

Uri是一个通用资源标志符,将其分为A,B,C,D 4个部分:
A:无法改变的标准前缀,包括;"content://"、"tel://"等。当前缀是"content://"时,说明通过一个Content Provider控制这些数据 
B:URI的标识,它通过authorities属性声明,用于定义了是哪
个ContentProvider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。例
如:"content://com.test.data.myprovider" 
C:路径,可以近似的理解为需要操作的数据库中表的名字,如:"content://hx.android.text.myprovider/name"中的name
D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;

/获取ContentResolver对象
ContentResolver resolver = ctx.getContentResolver();
//获取Uri对象
Uri uri = Uri.parse("content://com.test.MyProvider");
//获取数据
Cursor c = resolver.query(uri, null, null, null, null);
c.moveToFirst();
for(int i=0; i<c.getCount(); i++){
int index = c.getColumnIndexOrThrow("name");
String src = c.getString(index);
Log.d("Debug", src);
c.moveToNext();

android 存储的更多相关文章

  1. Android存储访问及目录

    Android存储访问及目录 Android的外部存储 Android支持外部存储(case-insensitive filesystem with immutable POSIX permissio ...

  2. Android存储之SQLite数据库

    Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...

  3. Android存储路径你了解多少?

    在了解存储路径之前,先来看看Android QQ的文件管理界面,了解一下QQ的数据文件路径来源,到底是来源于什么地方? 手Q文件管理对应存储目录 我的文件:是指放在QQ指定目录下的文件:/tencen ...

  4. Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)

    本文出自:http://blog.csdn.net/dt235201314/article/details/73176149 源码下载欢迎Star(updating):https://github.c ...

  5. 一篇文章搞懂android存储目录结构

    前言 前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安 ...

  6. android存储方式的应用场景

    作为一个完整的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.文件存储.SQLite. Content Provider ...

  7. Android开发学习——android存储

    Android的存储 内部存储空间RAM内存:运行内存,相当于电脑的内存ROM内存:存储内存,相当于电脑的硬盘外部存储空间 SD卡:相当于电脑的移动硬盘    * 2.2之前,sd卡路径:sdcard ...

  8. Android存储

    Android的四种数据存储方式: 1.SharedPrefrences 2.SQLite 3.Content Provider 4.File SharedPrefrences: 1.是一种轻型的数据 ...

  9. 利用反射得到android存储路径

    获得android手机的存储路径: public String getPrimaryStoragePath(){ try{ StorageManager sm = (StorageManager) c ...

随机推荐

  1. csharp通过dll调用opencv函数,图片作为参数

    [blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数          ​一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找 ...

  2. Unity5 Standard自发光材质无效解决方法

    受光物和发光物都要勾选Static才会有效. 如果不够选静态就是用HDR光照,需要相机勾选HDR 所以如果是动态的物体真实发光,Unity依旧无法支持

  3. web简单连接html文件测试

    Web工程: 条件: apache-tomcat-6.0.20(文件夹/7.0)=======位于E盘 标题:链接服务器 步骤: 第一步:打开apache-tomcat-6.0.20-bin-star ...

  4. 2016年11月28日 星期一 --出埃及记 Exodus 20:19

    2016年11月28日 星期一 --出埃及记 Exodus 20:19 and said to Moses, "Speak to us yourself and we will listen ...

  5. PHP计划任务之关闭浏览器后仍然继续执行的函数

    函数名称:ignore_user_abort 本函数配置或取得使用端连接中断后,PHP 程序是否仍继续执行.默认值为中断连接后就停止执行.在 PHP 配置文件中 (php3.ini/php.ini) ...

  6. MVC系列之一 入门概述

    一 概述 MVC作为一种当前比较好的开发web的框架,不得不提一下了,和WebForm比较来看,有了很大的进步和改进. 先进行一个简单的比较,两个都是Web开发框架,理念仍然是较快速开发. 不过MVC ...

  7. Java1.8.0_05 环境配置

    1.计算机->属性->高级系统设置->环境变量->系统变量 2.新建JAVA_HOME 变量值设为C:\Java\jdk1.8.0_05 即安装目录,确定. 3.新建CLASS ...

  8. <转>离婚前夜悟出的三件事

    文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&a ...

  9. 修改数据库表的schema,(表的[dbo.]前缀)

    数据库使用过程中遇到这种问题,请看下图

  10. Refresh / Updating a form screen in Oracle D2k Forms 6i

    Refresh / Updating a form screen in Oracle D2k Forms 6i ProblemYou want to show number of records pr ...