ViewModel использует SharedPreference для хранения переменной - PullRequest
0 голосов
/ 10 января 2020

Я создаю объект для использования sharedPreference.

private const val PREF_LOGIN_NAME = "loginName"

object LoginPreferences {

    fun getStoredName(context: Context): String {
        val prefs = PreferenceManager.getDefaultSharedPreferences(context)
        return prefs.getString(PREF_LOGIN_NAME, "testExample")!!
    }

    fun setStoredName(context: Context, query: String) {
        PreferenceManager.getDefaultSharedPreferences(context)
            .edit()
            .putString(PREF_LOGIN_NAME, query)
            .apply()
    }
}

Затем я использую этот объект с моей ViewModel.

class LoginViewModel(private val app: Application) : AndroidViewModel(app) {

    val name: String
        get() = LoginPreferences.getStoredName(app)

    fun loginSubmit() {
        LoginPreferences.setStoredName(app, name)
    }
}

LoginViewModel является успешной привязкой в ​​моем LoginFragment.

Но если я хочу сохранить его в sharedPreference, код, который я показываю в LoginViewModel, не работает для меня.

1 Ответ

1 голос
/ 10 января 2020

Второй параметр в методе prefs.getString(...) представляет значение по умолчанию , а не само значение.

prefs.getString(PREF_LOGIN_NAME, "testExample") означает, что если ваши общие настройки не могут найти значение, связанное с указанный ключ (PREF_LOGIN_NAME), вместо этого он вернет значение по умолчанию - "testExample"

См. https://developer.android.com/reference/android/content/SharedPreferences.html#getString (java .lang.String,% 20 java. lang.String)

Если вы хотите очистить свои общие настройки, вы можете сделать:

prefs.edit().clear().apply()

Затем, если вы впервые позвоните getStoredName(...), вы в результате получите testExample (при условии, что вы не звоните setStoredName(...) до этого).

...