【发布时间】:2021-12-27 02:53:43
【问题描述】:
尝试使用实时数据收听连接回调。 回调“onAvailable”和“onLost”被触发,但 ViewModel 中的“postValue”没有被触发。当 AppViewModel 被初始化并且 init 只被调用一次时,它是第一次。 当我将 postData 移到网络回调之外时,它会触发。 任何帮助表示赞赏。
class AppViewModel(application: Application) : AndroidViewModel(application) {
private var connectivityManager =
application.applicationContext.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
var wifiStatusListener = MutableLiveData<Boolean>()
var callback: NetworkCallback =
object : NetworkCallback() {
override fun onAvailable(network: Network) {
wifiStatusListener.postValue(true) // never calls.
logI(TAG, "onAvailable ${network.describeContents()}")
}
override fun onLost(network: Network) {
wifiStatusListener.postValue(false) // never calls.
logE(TAG, "onLost ${network.describeContents()}")
}
}
init {
logI(TAG, "View Model Initialized")
viewModelScope.launch {
initWiFiStatusCheckListener()
}
}
// called from init in ViewModel
connectivityManager.registerDefaultNetworkCallback(callback)
在 Activity 中,这就是 View 模型的初始化方式。 下面的日志第一次只调用一次
logI(TAG, "Wifi Listener $it")
appViewModel = ViewModelProvider(this).get(AppViewModel::class.java)
appViewModel.wifiStatusListener.observe(this, Observer {
logI(TAG, "Wifi Listener $it")
})
【问题讨论】:
-
看来代码没有问题。您能帮忙在活动中的
registerDefaultNetworkCallback()和观察wifiStatusListener上附加更完整的代码吗?
标签: android kotlin android-livedata mutablelivedata