无法使用 Kotlin 在 Android sharedPreferences 中保存数据

Posted

技术标签:

【中文标题】无法使用 Kotlin 在 Android sharedPreferences 中保存数据【英文标题】:Not able to save data in Android sharedPreferences using Kotlin 【发布时间】:2021-04-08 14:42:18 【问题描述】:

我正在尝试配置 sharedPreferences 以存储用户访问令牌。我正在关注本教程:https://auth0.com/blog/authenticating-android-apps-developed-with-kotlin/#Securing-Kotlin-App-with-Auth0

这是我的代码:

MainActivity.kt

    private fun login() 
        val account = Auth0(getString(R.string.com_auth0_client_id), getString(R.string.auth0_domain))
        account.isOIDCConformant = true
        account.isLoggingEnabled = true

        WebAuthProvider.login(account)
            .withScheme(getString(R.string.scheme))
            .withAudience(getString(R.string.audience))
            .start(this@MainActivity, AuthenticationHandler(this@MainActivity))
    

AuthenticationHandler.kt

    override fun onSuccess(credentials: Credentials) 
        runOnUiThread 
            Runnable 
                CredentialsManager.saveCredentials(context, credentials)
                val intent = Intent(this@AuthenticationHandler, MainActivity::class.java)
                startActivity(intent)
            
        
    

CredentialsManager.kt(它是一个对象/单例)

    fun saveCredentials(context: Context, credentials: Credentials) 
        val sp = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)

        sp!!.edit().putString(ACCESS_TOKEN, credentials.accessToken)
            .apply()
    

    fun getAccessToken(context: Context): String? 
        val sp = context.getSharedPreferences(
            PREFERENCES_NAME, Context.MODE_PRIVATE)

        return sp!!.getString(ACCESS_TOKEN, null)
    

任何帮助将不胜感激!当我尝试从 sharedPreferences 检索访问令牌或使用它发出一个 post http 请求时,我得到的只是空指针异常。

我正在这样检索它:(我得到空值)

println(CredentialsManager.getAccessToken(this@MainActivity))

【问题讨论】:

你如何确定它没有保存。您显示的内容应该可以工作,但可能您没有正确检索它。 @Tenfour04 我在做 val sp = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE) return sp!!.getString(ACCESS_TOKEN, null) 我在做 print(sp!!.getString(ACCESS_TOKEN, null) ) 代码看起来不错。检查以确保 saveCredentials 函数实际上被调用。您可以在该函数中记录一些内容或使用调试工具。 如果您需要有关崩溃的帮助,请也发布堆栈跟踪。无论如何,看起来你在实例化Intent时正在处理你的AuthenticationHandler´ as a Context`,但你自己也在实例化AuthenticationHandler,所以它不能作为Context工作。 【参考方案1】:

@Lucy 郝 请检查正在写入的值,打印它,并检查它是否为空。

【讨论】:

以上是关于无法使用 Kotlin 在 Android sharedPreferences 中保存数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Kotlin 在 Android sharedPreferences 中保存数据

使用 RecyclerView 的多视图 - Kotlin(Android) - 无法切换视图

在 Kotlin Android 中使用 Apollo 客户端使用 GraphQL API 时无法执行 HTTP 调用

Swift Sha512 加密(翻译 Kotlin 代码)

无法使用缩写 android kotlin 生成自定义图像

无法解析来自库模块的 Kotlin Android 扩展布局