Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 餓了麼開源項目:便捷高效的Android數據持久化存儲框架

餓了麼開源項目:便捷高效的Android數據持久化存儲框架

編輯:關於Android編程

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;
                     }
                   });

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved