简单的 Kotlin 数据保存

Simple Kotlin Data Save

我正在尝试为 Android 制作一个简单的 Kotlin Class 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? 关键字有一个未解析的引用。

首先,sharedPref.getString(KEY_SAVENAME, "Default") returns一个String?,因为"Default"-字符串可以是null。有关详细信息,请查看 .

其次,尝试使用

preferences = PreferenceManager.getDefaultSharedPreferences(context)

启动首选项实例。

更好的做法是在构造用户对象时传递共享首选项实例,因为用户 class 不应该关心共享首选项的构建方式或 activity:

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

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

val sharedPref : SharedPreferences = applicationContext.getSharedPreferences(PREFERENCE_FILE_KEY, MODE_PRIVATE)
val user = User("username", sharedPref)
user.Save()
         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)
                }
            }