数据存储AndroidStudio

时间:2020-10-21 13:22:56

标签: android kotlin asynchronous coroutine

我正在寻找使用android存储一些数据的方法,我尝试使用数据存储区(jetpack android)。

我实际上是:

class StoreToken(context:Context){
    private val dataStore = context.createDataStore(name = "token")
    companion object{
        val TOKEN_ACCESS_CIPHER_KEY = preferencesKey<String>("TOKEN_ACCESS_CIPHER")
    }

    suspend fun storeToken(accessCipher: String){
        dataStore.edit {
            it[TOKEN_ACCESS_CIPHER_KEY] = accessCipher
        }
    }

    val accessCipher = dataStore.data.map{ it[TOKEN_ACCESS_CIPHER_KEY] ?: "none" }

}

我将我的access_cipher_key存储在此处: 在Kotlin课堂上,他们使用OkHttp进行api调用

GlobalScope.launch {
    StoreToken(context).storeToken("key")
}

所以现在,当我尝试阅读它时,我会这样做的:(我把它加点了):


class HomeLoggedActivity : AppCompatActivity() {

    lateinit var storeToken: StoreToken

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_home_logged)

        storeToken = StoreToken(this)
        storeToken.accessCipher


    }
}

我尝试了很多事情来读取它(迭代,字符串化,...) 我认为这可能是异步错误,或者我的思维过程与异步无关

1 个答案:

答案 0 :(得分:0)

我找到了解决方案::

GlobalScope.launch {
        storeToken.accessCipher.collect {
            println(it)
}

只需使用.collect即可! (您需要在协程中,这就是为什么我在那里直接使用globalScope的原因)