Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在来自多个用例/交互者的viewmodel中使用Kotlin流的组合结果?_Android_Kotlin_Mvvm_Clean Architecture_Kotlin Flow - Fatal编程技术网

Android 如何在来自多个用例/交互者的viewmodel中使用Kotlin流的组合结果?

Android 如何在来自多个用例/交互者的viewmodel中使用Kotlin流的组合结果?,android,kotlin,mvvm,clean-architecture,kotlin-flow,Android,Kotlin,Mvvm,Clean Architecture,Kotlin Flow,背景 我正在尝试用存储库和用例/交互器实现MVVM风格的干净体系结构模式。我希望将Kotlin流用于用例/交互器。所有用例都有相同的设置,结果包装在一个密封的类中 响应包装器: sealed class Response<out T> { object Loading : Response<Nothing>() data class Success<T>(val data: T? = null) : Response<T>()

背景

我正在尝试用存储库和用例/交互器实现MVVM风格的干净体系结构模式。我希望将Kotlin流用于用例/交互器。所有用例都有相同的设置,结果包装在一个密封的类中

响应包装器:

sealed class Response<out T> {
    object Loading : Response<Nothing>()
    data class Success<T>(val data: T? = null) : Response<T>()
    data class Error(val error: ErrorEntity? = null) : Response<Nothing>()
    data class Empty(val msg: Int = R.string.empty_string) : Response<Nothing>()
}
interface UseCase<T, Params> {
    fun execute(params: Params? = null) : Flow<Response<T>>
}
问题:

根据:, 有多个选项可以组合和展平多个流。哪一个最适合我的问题?我将如何实现这一点

我知道你的问题解决了

下面是如何组合这两个流

firebaseUser.combine(userList).collect { fbuser, userlist -> 
  //combine the results and set the livedata here
  someFunThatSetsLiveData(fbuser, userlist)
}    
每当这些流中的一个发出新结果时,都会调用SomeFuntThatSetsLiveData。

我看到它解决了您的问题

下面是如何组合这两个流

firebaseUser.combine(userList).collect { fbuser, userlist -> 
  //combine the results and set the livedata here
  someFunThatSetsLiveData(fbuser, userlist)
}    
每当这些流中的一个发出新结果时,就会调用SomeFuntThatSetsLiveData