要在Android中使用Flow创建回调,可以按照以下步骤进行操作:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
interface Callback {
fun onSuccess(data: T)
fun onError(error: Throwable)
}
class MyViewModel : ViewModel() {
private val _callbackFlow = MutableSharedFlow()
val callbackFlow: SharedFlow = _callbackFlow
fun performAsyncOperation(callback: Callback) {
viewModelScope.launch {
try {
// 模拟异步操作
delay(2000)
val result = "操作完成"
_callbackFlow.emit(result)
callback.onSuccess(result)
} catch (e: Exception) {
_callbackFlow.emit(e.toString())
callback.onError(e)
}
}
}
}
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycleScope.launchWhenStarted {
viewModel.callbackFlow.collect { result ->
// 处理回调结果
Toast.makeText(this@MyActivity, result, Toast.LENGTH_SHORT).show()
}
}
// 启动异步操作
viewModel.performAsyncOperation(object : Callback {
override fun onSuccess(data: String) {
// 处理成功回调
}
override fun onError(error: Throwable) {
// 处理错误回调
}
})
}
}
通过使用Flow创建回调,可以在异步操作完成后,通过Flow将结果发送到观察者,从而简化回调处理流程。