My Volley class 使用过时的共享首选项值

My Volley class uses outdated Shared Preferences value

我有一个 Volley 构造器 class:

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..
}

我使用共享首选项值来比较自定义主机名验证器中的主机:

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)
}

当我在我的 SettingsActivity 中更改 expectedHostname 的值时,它会立即在 MainActivity 中更新,正如我在 Log.d 中看到的那样,但在 class VolleySingleton 中却没有。它仍然具有以前的价值。只有重新启动应用程序才能解决问题。

class 的新实例我在 MainActivity 中创建的方式如下:

VolleySingleton.getInstance(applicationContext).addToRequestQueue(request)

我是 Kotlin 和 Java 的新手,非常感谢对此的任何帮助。谢谢

sharedPref.getString("expectedHostname", null) 值计算一次并在 VolleySingleton 对象初始化时保存在 expectedHost 支持字段中。如果你想在每次调用 expectedHost 时 return 一个不同的更新值,你必须将正确的逻辑移动到 属性 的 getter:

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