频道栏目
首页 > 资讯 > Android > 正文

饿了么开源项目:便捷高效的Android数据持久化存储框架

16-05-18        来源:[db:作者]  
收藏   我要投稿

Android应用开发时经常要对许多数据进行持久化存储,便于以后访问。

对于int、double、boolean这些基本数据,可以使用SharedPreference。对于一些对象,往SharedPreference里存储的时候需要使用序列化技术。如果对象很大,或者碰到列表、数组等结构,就必须使用数据库。而使用数据库比较麻烦,成本比较大。

这里介绍一个新的存储框架,使用非常简单,可以存储任意对象,对象不需要实现序列化接口。上层使用缓存机制,读取数据非常高效。

项目地址:

https://github.com/Xiaofei-it/AndroidDataStorage
 

特色

 

1、实现安卓设备上的对象持久化,能存储和读取任何对象。

2、读写速度比SharedPreference等基于文件的存储方案高。

3、大量对象读写操作的场景下,使用此框架能极大提升性能,比通常的数据库方案高效。

4、上层使用缓存,读写数据快速高效。底层使用数据库,在进程被终止并重新启动后能快速恢复对象。

5、接口简单易用,用户无需了解安卓存储机制。

6、经过严格测试,有良好的容错能力和稳定性。

Gradle

dependencies {
    compile 'xiaofei.library:android-data-storage:1.0.2'
}

Maven


  xiaofei.library
  android-data-storage
  1.0.2
  pom

用法

1. 获取接口

获取IDataStorage接口,目前只支持数据库类型。

IDataStorage dataStorage = DataStorageFactory.getInstance(
                               getApplicationContext(),
                               DataStorageFactory.TYPE_DATABASE);

2、存储原理

存储数据的时候,索引是类id和对象id。如果这两个id相同,则老数据被覆盖。读取数据的时候也需要提供这两个id。

3、类id

给需要存储的类加上ClassId注解,里面写上类id。需要保证不同的类有不同的id。

如果不同版本的代码在混淆后,能保证该类的类名不变,那就不需要加注解。框架将类的包名和类名作为类id。

4、对象id

如果类的某个字段就是对象id,那在那个字段之前加上ObjectId注解。该字段必须是String。框架将这个字段作为对象id。

如果没有这个字段,那读写数据的时候需要提供对象id作为函数的参数。

以下给出一个例子:

@ClassId("Order")
public class Order {
    @ObjectId
    private String mId;

    private int mState;

    public int getState() {
        return mState;
    }
    ...
    ...
}

5、存储数据

存储对象order:

dataStorage.saveOrUpdate(order);

存储一个order列表:

List list = new ArrayList();
...
dataStorage.saveOrUpdate(list);

如果Order内部没有对象id的字段:

dataStorage.saveOrUpdate(order, "1001");

List list = new ArrayList();
List ids = new ArrayList();
...
//list和ids一一对应
dataStorage.saveOrUpdate(list, ids);

6、读取数据

读取一个数据

Order order = dataStorage.load(Order.class, "1001");

读取所有Order

List list = dataStorage.loadAll(Order.class);

读取mState为10的所有Order

List list = dataStorage.load(Order.class, new Condition() {
                     @Override
                     public boolean satisfy(Order o) {
                         return o.getState() == 10;
                     }
                   });

读取一批id的Order

List ids = new ArrayList();
...
List list = dataStorage.load(Order.class, ids);

以上函数都有一个参数Comparator供选择,提供Comparator后,获取的List是经过排序的。

List list = dataStorage.loadAll(Order.class, comparator);

 

7、删除数据

删除一个数据

dataStorage.delete(order);

如果Order类里没有提供对象id,那么

dataStorage.delete(Order.class, "1001");

删除所有Order

dataStorage.deleteAll(Order.class);

删除一批Order

List list = new ArrayList();
dataStorage.delete(list);

如果Order类里没有提供对象id,那么

List ids = new ArrayList();
...
dataStorage.delete(Order.class, ids);

删除mState为10的Order

dataStorage.delete(Order.class, new Condition() {
                     @Override
                     public boolean satisfy(Order o) {
                         return o.getState() == 10;
                     }
                   });

 

相关TAG标签
上一篇:计算机组成.运动中的小数点.浮点数
下一篇:Android--SurfaceView使用详解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站