Мой класс Volley использует устаревшее значение Shared Preferences - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть класс конструктора Volley:

class VolleySingleton constructor(context: Context) {
    companion object {
        @Volatile
        private var INSTANCE: VolleySingleton? = null

        fun getInstance(context: Context) =
            INSTANCE ?: synchronized(this) {
                INSTANCE ?: VolleySingleton(context).also {
                    INSTANCE = it
                }
            }
    }

   some deals..
}

Я использую значение общих настроек для сравнения хостов в настраиваемом hostnameVerifier:

private val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
private val expectedHost: String? = sharedPref.getString("expectedHostname", null)

private val hostnameVerifier: HostnameVerifier = HostnameVerifier { _, session ->
    val hv = HttpsURLConnection.getDefaultHostnameVerifier()
    hv.verify(expectedHost, session)
}

Когда я изменяю значение Ожидаемое имя_хоста в моей Настройке активности это немедленно обновляется в MainActivity, как я вижу в Log.d, но не в классе VolleySingleton.Это все еще имеет предыдущее значение.Только перезапуск приложения решает проблему.

Новый экземпляр класса, который я создаю в MainActivity, выглядит следующим образом:

VolleySingleton.getInstance(applicationContext).addToRequestQueue(request)

Я очень новичок в Kotlin и Java и буду признателен за любую помощьс этим.Спасибо.

1 Ответ

1 голос
/ 21 сентября 2019

Значение sharedPref.getString("expectedHostname", null) вычисляется один раз и сохраняется в резервном поле expectedHost при инициализации объекта VolleySingleton.Если вы хотите возвращать новое обновленное значение при каждом вызове expectedHost, вам нужно переместить правильную логику в метод получения свойства:

private val expectedHost: String?
    get() = sharedPref.getString("expectedHostname", null)
...