简单的 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)
}
}
我正在尝试为 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)
}
}