回调成功后如何从函数返回

问题描述 投票:0回答:1

嗨,在我的视图模型中,我有一个返回 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

android kotlin callback viewmodel
1个回答
0
投票

您告诉函数返回默认值,它就会返回默认值。当被

scanForDevicesAndConnectTohomeCharger
调用时,你的回调将不再执行任何操作,因为为时已晚。

您必须从 Activity 传递

BleStateCallback
,然后相应地对
onBleDeviceStateChange
的回调做出反应。

但我强烈建议您查看

Activities
ViewModel
应该如何一起玩。特别是在您的场景中,建议引入一个
LiveData
来保存您的
BleDeviceState
(初始状态和正在进行的更改),并且您的活动将简单地观察此公开的 LiveData 并对此做出反应。

© www.soinside.com 2019 - 2024. All rights reserved.