#android #xml #android-studio #kotlin
Вопрос:
У меня есть код, в котором я несколько раз вызывал SharedPref.edit() и SharedPref.apply (). Как сделать так, чтобы преобразовать его в вызов только один раз.
if (success) {
val data = response.getJSONObject("data")
sharedPreferences.edit().putBoolean("isLoggedIn", true).apply()
sharedPreferences.edit()
.putString("user_id", data.getString("user_id")).apply()
sharedPreferences.edit().putString("name", data.getString("name"))
.apply()
sharedPreferences.edit().putString("email", data.getString("email"))
.apply()
sharedPreferences.edit()
.putString("mobile_number", data.getString("mobile_number"))
.apply()
sharedPreferences.edit()
.putString("address", data.getString("address")).apply()
StyleableToast.Builder(this)
.text("Welcome " data.getString("name"))
.backgroundColor(Color.RED)
.textColor(Color.WHITE).show()
userSuccessfullyLoggedIn()
}
Я хочу использовать вызов метода только один раз.
Это может быть вызвано один раз, возвращенный экземпляр редактора может быть сохранен в переменной и использован повторно.
Как это сделать ??
Ответ №1:
Эти небольшие шаги помогут упорядочить ваш код.
Вы можете сформулировать это так:
val editor = sharedPreferences.edit()
Тогда используйте его :
editor.putBoolean("isLoggedIn", true)
И добавьте другие значения без «.apply()»
Затем поставьте в конце:
editor.apply()
Ответ №2:
вы можете создать свои собственные общие настройки
class CustomSharedPreferences {
companion object {
private val PREFERENCES_USER_NAME = "preferences_user_name"
private var sharedPreferences: SharedPreferences? = null
@Volatile private var instance: CustomSharedPreferences? = null
private val lock = Any()
operator fun invoke(context: Context) : CustomSharedPreferences = instance ?: synchronized(lock){
instance ?: makeCustomSharedPreferences(context).also {
instance = it
}
}
private fun makeCustomSharedPreferences(context: Context) : CustomSharedPreferences{
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
return CustomSharedPreferences()
}
}
fun saveUser(name: String, email: String){
sharedPreferences?.edit(commit = true){
putString(PREFERENCES_USER_NAME, name)
}
}
fun getUser() = sharedPreferences?.getString(PREFERENCES_USER_NAME, "")
}
Вы можете сохранить всю информацию в SP в saveUser().