【问题标题】:Simple Kotlin Data Save简单的 Kotlin 数据保存
【发布时间】:2019-12-21 14:03:19
【问题描述】:

我正在尝试为 Android 制作一个简单的 Kotlin 类 user,我想保存用户名以在关闭和重新打开应用程序时保留它

import android.content.Context.MODE_PRIVATE
import android.content.SharedPreferences

class User (var username : String){
    private val PREFERENCE_FILE_KEY = "AppPreference"
    private val KEY_USERNAME= "prefUserNameKey"
    private val sharedPref : SharedPreferences = activity?.getSharedPreferences(PREFERENCE_FILE_KEY, MODE_PRIVATE)

    fun Save(){
        with (sharedPref.edit()) {
        putString(KEY_USERNAME, username)
        commit()
        }
    }

    fun Load(){
        teamname = sharedPref.getString(KEY_SAVENAME, "Default")?:"Default"
    }
}

我有第一个问题: android studio 说sharedPref.getString(KEY_SAVENAME, "Default")String?,那么这里的默认值有什么用呢?

其次,我真正的问题是activity? 关键字有一个未解析的引用。

【问题讨论】:

  • activity?. 将返回未解析的引用,因为没有为 User 类提供活动上下文。要解决它,只需传递对活动的引用。
  • 为了在 Kotlin 项目中使用 SharedPreferences,我强烈推荐 KotPref:github.com/chibatching/Kotpref

标签: android kotlin save


【解决方案1】:

更好的做法是在构造用户对象时传递共享首选项实例,因为用户类不应该关心共享首选项是如何构建的或关于活动的:

class User (var username : String, private val sharedPref : SharedPreferences){
}

此外,在获取共享首选项实例时,使用应用程序上下文而不是活动来防止内存泄漏:

val sharedPref : SharedPreferences = applicationContext.getSharedPreferences(PREFERENCE_FILE_KEY, MODE_PRIVATE)
val user = User("username", sharedPref)
user.Save()

【讨论】:

    【解决方案2】:

    首先,sharedPref.getString(KEY_SAVENAME, "Default") 返回一个String?,因为“默认”字符串可以是null。更多信息请查看here

    其次,尝试使用

    preferences = PreferenceManager.getDefaultSharedPreferences(context)
    

    启动首选项实例。

    【讨论】:

    • Tkanks,我理解String?。根据 Android Studio,不推荐使用 PreferenceManager。
    【解决方案3】:
             private lateinit var sharedpreferences: SharedPreferences
    
                companion object {
                    val mypreference = "mypref"
                    val Name = "nameKey"
                }
    
           private fun Save(userName : String) {
                    val editor = sharedpreferences.edit()
                    editor.putString(Name, userName)
                    etName.setText("username")
                    editor.apply()
                }
    
              private  fun Get(userName: String) {
                    sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE)
    
                    if (sharedpreferences.contains(Name)) {
                        val setString = sharedpreferences.getString(Name, userName)
                        etName.setText(getString)
                    }
                }
    
    
    //Call funtion in onCreate method
                private fun containUserString(){
                    sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE)
                    if (sharedpreferences.contains(Name)) {
                        val setString = sharedpreferences.getString(Name, "")
                        etName.setText(getString)
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多