首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetpack DataStore实现

Jetpack DataStore实现
EN

Stack Overflow用户
提问于 2021-11-06 17:15:36
回答 1查看 130关注 0票数 0

你好,我正在通过观看一些教程来尝试将JetPack数据存储实现到我的应用程序中,我是koltin的新手。我关注了这段视频中的所有内容:https://www.youtube.com/watch?v=0J5GXuGD61E&t=366s

UserManager.kt

代码语言:javascript
复制
class UserManager(context: Context) {

//Create the dataStore
private val dataStore = context.createDataStore(name = "user_prefs")

//Create some keys
companion object {
    val USER_AGE_KEY = preferencesKey<String>("USER_AGE")
    val USER_NAME_KEY = preferencesKey<String>("USER_NAME")
}

//Store user data
suspend fun storeUser(age: String, name: String) {
    dataStore.edit {
        it[USER_AGE_KEY] = age
        it[USER_NAME_KEY] = name

    }
}

//Create a name flow
val userNameFlow: Flow<String> = dataStore.data.map {
    it[USER_NAME_KEY] ?: ""
}
//Create a name flow
val userAgeFlow: Flow<String> = dataStore.data.map {
    it[USER_AGE_KEY] ?: ""
}

}

MainActivity.kt类

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {

lateinit var userManager: UserManager
var name = ""
var age = ""

var dataStoreEmail = ""
var dataStorePassword = ""

private fun saveData(email: String, password:String){
    GlobalScope.launch {
        userManager.storeUser(email,password)
    }
}

private fun observeData() {

    //Updates age
    userManager.userAgeFlow.asLiveData().observe(this, {
        age = it
        dataStoreEmail = it.toString()
    })

    //Updates name
    userManager.userNameFlow.asLiveData().observe(this, {
        name = it
        dataStorePassword= it.toString()

    })

    println("================================== " + dataStoreEmail + "  ====================" + dataStorePassword)

}

当我尝试访问这些方法中的任何一个时,我会得到:

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapp, PID: *
    kotlin.UninitializedPropertyAccessException: lateinit property userManager has not been initialized
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-06 17:23:12

正如错误消息中所述,您有一个未初始化的lateinit属性:

代码语言:javascript
复制
lateinit var userManager: UserManager

在使用之前,需要先进行初始化,如下所示:

代码语言:javascript
复制
userManager = UserManager(this) // From MainActivity
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69866206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档