Jetpack架構學習(7)——使用DataStore存儲配置信息
原文地址: Jetpack架構學習(7)——使用DataStore存儲配置信息-Stars-One的雜貨小窩
這里由于開發的app使用的compose架構,比較適合與DataStore一起使用,所以稍微學習了使用方法,順便記錄下
其實DataStore和SharePreference使用方式類似,就是如果你的是新項目,沒有啥歷史包袱,可以試著用下,使用Flow和Compose使用還是挺舒服的
介紹
DataStore分2種類型:
Preferences DataStore存儲配置信息Proto DataStore存儲對象數據(二進制)
常用的存儲配置信息,存儲對象數據一般比較少用,這里也不深究了
使用
1.依賴導入
// Preferences DataStore (SharedPreferences like APIs)
dependencies {
implementation("androidx.datastore:datastore-preferences:1.1.7")
}
// Alternatively - use the following artifact without an Android dependency.
dependencies {
implementation("androidx.datastore:datastore-preferences-core:1.1.7")
}
2.數據讀取和寫入
這里,首先得給Context加個擴展方法,用來創建我們的DataStore實例
//需要在頂層kt文件創建,name參數可以任取
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
一般我們一個app,只需要用到一個DataStore即可,如果你想要創建多個,可以搞幾個擴展方法,然后創建不同名字的DataStore
下面給一個簡單封裝示例,用于存儲keyexample_counter的為int類型數據:
class MySetting(val context:Context){
val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
//寫入數據:
suspend fun incrementCounter(data:Int) {
context.dataStore.edit { settings ->
settings[EXAMPLE_COUNTER] = data
}
}
//讀取數據
val exampleCounterFlow: Flow<Int> = context.dataStore.data
.map { preferences ->
// No type safety.
preferences[EXAMPLE_COUNTER] ?: 0
}
}
intPreferencesKey用來定義你的數據key,從名字看得出來,你的key對應的數據是int類型,除此之外,還有其他幾個方法:doublePreferencesKeystringPreferencesKeybooleanPreferencesKeyfloatPreferencesKeylongPreferencesKeystringSetPreferencesKeybyteArrayPreferencesKey
從名字可以直接看得出類型,這里就不解釋了
如果你還是想使用同步方法調用,可以使用協程的runBlocking方法
頁面使用:
val context = LocalContext.current
val mySetting remember { MySetting(context)}
Column(){
val num by mySetting.exampleCounterFlow.collectAsState(0)
Text(num.toString())
}


浙公網安備 33010602011771號