【AndroidX】DataStore API使用示例

    // Preferences DataStore
    implementation "androidx.datastore:datastore-preferences:1.0.0-alpha02"

    // Proto DataStore
    implementation "androidx.datastore:datastore-core:1.0.0-alpha02"

    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2"//kotlin协程
object DataStoreUtil {

    private var dataStore: DataStore<Preferences>? = null
    private const val dataStoreName: String = "user"

    /**
     * 写入数据
     */
    suspend fun writeDataToDataStore(context: Context, key: String, msg: String) {
        if (dataStore == null) {
            dataStore = context.createDataStore(dataStoreName)
        }

        val data = preferencesKey<String>(key)
        dataStore!!.edit { user ->
            user[data] = msg
        }
    }

    /**
     * 读取数据
     */
    fun readDataFromDataStore(context: Context, key: String): Flow<String> {
        if (dataStore == null) {
            dataStore = context.createDataStore(dataStoreName)
        }

        val data = preferencesKey<String>(key)
        return dataStore!!.data.map { preferences: Preferences -> preferences[data] ?: "" }
    }
}
class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() {

    private val keys = arrayOf("测试1", "测试2", "测试3")
    private val tag: String = "DataStoreTest"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        async {
            createData()
        }
        findViewById<TextView>(R.id.my_text).setOnClickListener {
            async {
                getData()
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        cancel()
    }

    private suspend fun createData() {
        DataStoreUtil.writeDataToDataStore(this, keys[0], "123")
        DataStoreUtil.writeDataToDataStore(this, keys[1], "456")
        DataStoreUtil.writeDataToDataStore(this, keys[2], "789")
    }

    private suspend fun getData() {
        val index = abs(Random(System.currentTimeMillis()).nextInt()) % 3

        var readDataFromDataStore: Flow<String> =
                DataStoreUtil.readDataFromDataStore(
                        this,
                        keys[index])
        readDataFromDataStore.collect {
            Log.d(tag, it)
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Compose DataStore 是一种用于存储和读取键值对数据的 Jetpack Compose 组件。下面是一个使用 Compose DataStore 的代码示例: ```kotlin import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewmodel.compose.viewModel import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.createDataStore import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch data class UserSettings(val darkMode: Boolean) class UserSettingsViewModel(private val dataStore: DataStore<Preferences>) { private val userSettingsKey = preferencesKey<Boolean>("dark_mode") val userSettingsFlow = dataStore.data .map { preferences -> UserSettings( darkMode = preferences[userSettingsKey] ?: false ) } suspend fun updateUserSettings(userSettings: UserSettings) { dataStore.edit { preferences -> preferences[userSettingsKey] = userSettings.darkMode } } } @Composable fun UserSettingsScreen(userSettingsViewModel: UserSettingsViewModel = viewModel()) { val userSettings by userSettingsViewModel.userSettingsFlow.collectAsState(UserSettings(false)) val context = LocalContext.current val darkMode by rememberSaveable { mutableStateOf(userSettings.darkMode) } LaunchedEffect(Unit) { userSettingsViewModel.userSettingsFlow.collect { settings -> darkMode = settings.darkMode } } Column { Switch( checked = darkMode, onCheckedChange = { newDarkMode -> lifecycleScope.launch { userSettingsViewModel.updateUserSettings(UserSettings(newDarkMode)) } } ) } } @Composable fun App() { val dataStore = createDataStore(name = "user_settings") val userSettingsViewModel = remember { UserSettingsViewModel(dataStore) } UserSettingsScreen(userSettingsViewModel) } ``` 这个示例演示了如何使用 Compose DataStore 来存储和读取用户设置中的暗黑模式。通过 `UserSettingsViewModel` 类,我们可以获取和更新用户设置,并通过 `UserSettingsScreen` 组件来展示和修改用户设置。在 `App` 组件中,我们创建了一个名为 "user_settings" 的 DataStore,并将其传递给 `UserSettingsViewModel`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值