嗨,在我的视图模型中,我有一个返回 NoDataResult 的函数,该函数有一个回调
BleStateCallback
。
目前,根据下面的代码,一旦调用该函数,它就会返回
NoDataFailure(RuntimeException("Not today, buddy"))
,因为我已将其设置为默认值
但我只想在执行回调方法时返回
onBleDeviceStateChange
基于when state
这是我的功能。请推荐
private fun connectToCharger(activity: Activity): NoDataResult { var 结果:NoDataResult = NoDataFailure(RuntimeException("不是今天,伙计"))
blufiHelper.scanForDevicesAndConnectTohomeCharger(
activity,
"homewifi1",
object : BleStateCallback {
override fun updateMessage(message: String) {
// use livedata to update ui
Timber.d("xxx VM $message")
}
override fun onBleDeviceStateChange(state: BleDeviceState) {
Timber.d("xxx VM onBleDeviceStateChange $state")
result = when (state) {
BleDeviceState.Connected -> NoDataSuccess
BleDeviceState.Disconnected -> NoDataFailure(RuntimeException("Not today, buddy"))
else -> NoDataFailure(RuntimeException("Not today, buddy"))
}
}
})
Timber.d("xxx VM RETURNING")
return result
}
提前致谢 R
您告诉函数返回默认值,它就会返回默认值。当被
scanForDevicesAndConnectTohomeCharger
调用时,你的回调将不再执行任何操作,因为为时已晚。
您必须从 Activity 传递
BleStateCallback
,然后相应地对 onBleDeviceStateChange
的回调做出反应。
但我强烈建议您查看
Activities
和 ViewModel
应该如何一起玩。特别是在您的场景中,建议引入一个 LiveData
来保存您的 BleDeviceState
(初始状态和正在进行的更改),并且您的活动将简单地观察此公开的 LiveData 并对此做出反应。