Android最優雅SharedPreferences封裝(Kotlin版本)

2020-09-27 08:00:46

概述

          SharedPreferences作為android開發中最常用的持久化儲存方案,非常適合屬性和設定的本地儲存(另外也可以使用本地檔案、資料庫的方式實現持久化)。雖然SharedPreferences的使用較為方便,但是維護起來確非常的麻煩,我們很容易定義出冗餘的設定,也可能會生成大量的組態檔,甚至我們沒有足夠的信心來確定,定義的屬性是否被重複定義(會導致隱晦bug)。現基於Kotlin來進行物件導向API的封裝(使用到的技術有:類擴充套件、動態代理、註解等)。

 

使用

         

gradle中設定

  implementation 'com.zhangzheng.easystore:library:1.1.0'

 

Application初始化

 EasyStore.init(this)

       SharedPreferences的獲取需要通過Context,因為考慮到使用的簡便性,和後續的可延伸性,沒有采用在使用的時候傳遞Context的方式。

 

Demo範例

定義資料結構介面

interface TestStorage :Storable{
    var name:String
    var count:Int
    var isBool:Boolean
}

      在TestStorage組態檔中,設定了三個屬性,這裡只需要定義介面,不需要具體的實現,用來描述儲存的資料結構

 

獲取資料

 val loadFromLocal = TestStorage::class.load()

 

獲取單個資料

val name = TestStorage::class.get { name }

 

儲存資料

TestStorage::class.apply {
            name = "2777777"
            count = 100
            isBool =false
        }

     

  TestStorage::class.commit {
            name = "2777777"
            count = 100
            isBool =false
        }

     apply是非同步的,通過這種方式我們可以有選擇的儲存資料,比如如果只想儲存name可以使用如下的方式:

      TestStorage::class.commit { name = "2777777" } ,其他屬性並不會有變動。

 

擴充套件性

          實際開發中,我們不僅僅會將設定儲存在SharedPreferences中,資料庫和檔案也是我們的選擇方式之一,對於這種情況我們可以自己進行擴充套件,如下:

class TestStoreBuilder : IStoreBuilder {

    override fun build(storable: KClass<out Storable>, context: Context): IStore {
        return TestStore()
    }

    private class TestStore:IStore{
        override fun commit(values: Map<String, Any?>): Boolean {
        }

        override fun apply(values: Map<String, Any?>) {
        }

        override fun getAll(): Map<String, Any> {
        }
    }

}

使用方式

@Store(TestStoreBuilder::class)
interface TestStorage :Storable{
    var name:String
    var count:Int
    var isBool:Boolean
}

說明

        通過註解的方式來指定構造器,之所以採用這種方法來進行設計。一方面考慮通過抽象來遮蔽細節,開發者只需要定義設定資料結構而不需要關注實現,簡化使用難度;另外註解也無法傳遞範例,所以這裡藉助無構造引數的Builder來建立儲存策略。

 

最後

         如果這篇文章對您有用,希望大家可以關注和點贊!這裡獻上原始碼:https://github.com/long8313002/EasyStore