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)
我有一个 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)