Stories

Detail Return Return

Jetpack架構學習(7)——使用DataStore存儲配置信息 - Stories Detail

原文地址: Jetpack架構學習(7)——使用DataStore存儲配置信息-Stars-One的雜貨小窩

這裏由於開發的app使用的compose架構,比較適合與DataStore一起使用,所以稍微學習了使用方法,順便記錄下

其實DataStoreSharePreference使用方式類似,就是如果你的是新項目,沒有啥歷史包袱,可以試着用下,使用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類型,除此之外,還有其他幾個方法:
  • doublePreferencesKey
  • stringPreferencesKey
  • booleanPreferencesKey
  • floatPreferencesKey
  • longPreferencesKey
  • stringSetPreferencesKey
  • byteArrayPreferencesKey

從名字可以直接看得出類型,這裏就不解釋了

如果你還是想使用同步方法調用,可以使用協程的runBlocking方法

頁面使用:

val context = LocalContext.current
val mySetting  remember { MySetting(context)}

Column(){
    val num by mySetting.exampleCounterFlow.collectAsState(0)
    Text(num.toString())
}

參考

  • App Architecture: Data Layer - DataStore - Android Developers | App architecture
user avatar u_9449786 Avatar kangkaidesuancaiyu Avatar hejing-michael Avatar uwatechnologies Avatar airenaodexianrenqiu Avatar vivotech Avatar
Favorites 6 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.