<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

      原文地址: 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())
      }
      

      參考

      posted @ 2025-08-02 17:58  Stars-one  閱讀(294)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 狠狠cao日日穞夜夜穞av| 99国产精品99久久久久久| 天天爽天天摸天天碰| 大胸美女被吃奶爽死视频| 色五开心五月五月深深爱| 日本一区不卡高清更新二区| 狠狠五月深爱婷婷网| 激情在线一区二区三区视频| 亚洲熟妇自偷自拍另欧美 | 中文字幕av一区二区三区 | 日韩内射美女人妻一区二区三区| 日韩AV片无码一区二区不卡| 色偷偷成人综合亚洲精品| 国产精品久久久久久福利69堂| 午夜福利免费区在线观看| 少妇人妻偷人精品免费| 亚洲高潮喷水无码AV电影 | 欧美精品人人做人人爱视频| 久久三级中文欧大战字幕| 亚洲欧美综合人成在线| 日本喷奶水中文字幕视频| 蜜臀一区二区三区精品免费| 国产亚洲精品成人aa片新蒲金| 亚洲码与欧洲码区别入口| 国产免费一区二区不卡| 欧洲中文字幕一区二区| 人妻少妇精品视频二区| 精品视频福利| 亚洲日韩亚洲另类激情文学| 宜阳县| 亚洲国产成人精品女人久| 亚洲国产成熟视频在线多多| 精品亚洲欧美中文字幕在线看| 一区二区亚洲精品国产精| 一区二区三区人妻无码 | 亚洲无线码一区二区三区| free性开放小少妇| 久久久欧美国产精品人妻噜噜| 蜜臀av入口一区二区三区| 亚洲熟妇久久精品| 亚洲综合国产精品第一页|