Как использовать sharedpref.edit() только один раз

#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().