Android五大数据存储详解

Android五大数据存储

1. SharedPreferences:
 轻量级的存储类,以xml的形式存储。可以存储String,int,Boolean,float,long类型,但是需要注意的是,真的只能存储这些类型么?假如我现在想要存一个用户的信息,有uid,name,age,sex等等,是不是就要一个一个的存了?这样做合适么?如果遇到过以上场景你有考虑过怎么存储么?或许一下子就能想到json,json就是一个String,我们当然可以来将其用json封装再存储,这样我们在存储和获取的时候是不是就清晰许多了,最起码代码也不那么冗余了。
 <font color="red">着重说一下json的存储:</font>

 第一步:构建一个实体类userbean
    public class UserBean{
        public long uid;
        public String name;
        public int age;
        public int sex;
        public double money;//SharedPreferences不能存储的格式我们也可以封装在json中
    }
第二步:存储数据并进行转换
    UserBean userBean = new UserBean();
        userBean.age= 10;
        userBean.money=1000.00;
        userBean.name="张三";
        userBean.sex = 1;
        Gson gson = new Gson();
        String userInfo = gson.toJson(userBean);
第三步:存储和获取
    //存储
    SharedUtils.saveUserinfo(userInfo);
    //获取
    SharedUtils.getUserinfo();
    获取到的还是一个String,我们可以写一个公共的方法来将其转换为对应的bean返回,这样我们在取值的时候就方便很多了。
    UserBean userBean = new Gson().fromJson(SharedUtils.getUserinfo(),UserBean.class);

总结和延伸:
以上只是存储一个对象的形式,如果我们有需求存储一组数据呢,比如说一组学生的数据。或许你会说如果这样就不会采取这样的存储方式了。但是假如我们有这样的需求,而这组数据不会很大,在应用使用的过程中需要存储下,在某个地方需要使用,然后就没别的作用了。我们可以尝试这种存储方式试一下。答案是可以的,具体操作留着给自己尝试。

2. 文件存储:

关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件一般是用来存放大量数据的,如文本,图片,音视频等。
openFileOutput()方法的第一个参数是文本名称,如果不存在会创建。第二个参数是指定恩建的操作类型
四种文件操作类型:
- Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
- Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
- MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
- MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
延伸:
获取存放路径,获取某一目录的文件列表,获取sdk的状态,获取sd卡的路径等等,以及操作权限。

3. SQLite数据库

SQLite是轻量级嵌入式数据库引擎,它支持sql语言,并且只利用很少的内存就有很好的性能
使用SQLiteOpenHelper对数据库进行版本管理:
android为我们提供了SQLiteOpenHelper这个抽象类,必须继承它才能使用,主要用来对数据库版本进行管理。主要有onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)这两个方法。看名字就能看出来一个首次创建,一个是更新。那作用当然就是一个是首次安装时候创建数据库表的,一个是应用更新时候用来更新数据表结构的。
SQLiteDatabase:
通过getWritableDatabase()和getReadableDatabase()方法来获取一个操作数据库的实例SQLiteDatabase。既然是操作数据库的,那么该类就是封装的一下操作数据库的api。比如增删改查,这都是老生常谈的。但有两个方法是我们需要特别注意掌握的。execSQL()和rawQuery()方法
execSQL()方法可以执行insert、delete、update
rawQuery()方法用于执行select语句
但还需要特别注意的是特殊aql字符,因为我们在操作数据库的时候有些信息可能是用户自己输入的,避免不了存在单引号和&这样的特殊字符,记得记得记得转义!

4. ContentProvider存储

在解释ContentProvider的时候我们先来说一下前边的存储方式,前边的方式中我们一直都有提到私有,数据私有的,只供这一个应用访问的。那么问题来了,android系统中,这么多应用间不能做到数据共享么?当然可以,而ContentProvider就可以实现。
方法就是一个程序可以通过实现ContentProvider这个接口来接自己的数据暴露出去,至于这些数据是怎么存储的不重要的,重要的是其他程序可以通过一套标准的接口来访问这些数据,当然还会需要一些权限的问题。
具体操作也是通过游标content resover来对数据进行处理的。

5. 网络存储

网络存储就是我们最常用的和后台进行数据交互的一种方式了。注意在清单文件添加网络协议等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值