android - 在Android MVVM中,需要多少个存储库和网络客户端来提供不同的查询?

标签 android kotlin android-livedata android-architecture-components android-jetpack

我是使用MVVM和Android架构的新手,我有点困惑。

例如说我想制作一个类似Youtube的应用,因为您知道youtube在其底部导航中具有以下标签:主页,订阅,趋势(浏览)

这3个标签将显示项目(视频对象)的recylerview,这3个标签将显示3个不同查询的数据。

在使用viewmodel和livedata的MVVM中,数据流将像这样

片段<-viewModel <-存储库<-客户端

因此对于这3个选项卡,我将具有3个不同的片段,这也意味着我将具有3个不同的viewModels。现在我不确定我需要多少个存储库和网络客户端

如果我只有1个存储库和1个网络客户端,对吗?我需要多少个存储库和客户?

每个viewModel将从下面代码下面的VideoRepository检索liveData,最终每个片段将观察每个viewModel的数据

object VideoRepository {

    val homeVideos: LiveData<List<Video>> = VideoRetrofitClient.homeVideos
    val subscriptionVideos: LiveData<List<Video>> = VideoRetrofitClient.subscriptionVideos
    val trendingVideos: LiveData<List<Video>> = VideoRetrofitClient.trendingVideos

    fun searchHomeVideos() {
        VideoRetrofitClient.searchHomeVideos()
    }

    fun searchSubscriptionVideos() {
        VideoRetrofitClient.searchHomeVideos()
    }

    fun searchTrendingVideos() {
        VideoRetrofitClient.searchHomeVideos()
    }

}

VideoRepository将从该VideoRetrofitClient中获取LiveData,如下所示:
object VideoRetrofitClient {
    val homeVideos = MutableLiveData<List<Video>>()
    val subscriptionVideos = MutableLiveData<List<Video>>()
    val trendingVideos = MutableLiveData<List<Video>>()


    fun searchHomeVideos() {
        // perform networking ....

        homeVideos.postValue(videos)
    }

    fun searchSubscriptionVideos() {
        // perform networking ....

        subscriptionVideos.postValue(videos)
    }

    fun searchTrendingVideos() {
        // perform networking ....

        trendingVideos.postValue(videos)
    }
}

java或kotlin都可以

最佳答案

首先,在查询中,您可以通过传递可以是枚举类型的参数来区分它们。那么您只能通过在参数中传递不同的类型来仅调用一个存储库方法。如果不可能,则必须在客户端中为存储库创建三个不同的查询。

关于android - 在Android MVVM中,需要多少个存储库和网络客户端来提供不同的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60690700/

相关文章:

Android、HttpURLConnection 和处理错误的凭据

android - 为什么我的应用程序下载的文件在卸载后会被删除?

kotlin - Mapbox:错误设置属性:icon-image [2]分支标签必须是数字或字符串

如果快速调用,android LiveData Observable 不会返回数据

android - 在 kotlin 中为 ViewModel 编写单元测试用例

java - 我如何与 Intent.ACTION_SEND 一起共享和保存图像和文本?

java - 即使 ItemAnimator.canReuseUpdatedViewHolder() 返回 true,OnCreateViewHolder 仍然被调用

android - 如果 Android 设备处于暗模式,我如何以编程方式检测?

Android Kotlin 向数据类添加具有值的附加字段

Java Android LiveData 调用依赖于其他 LiveData 的 Room 查询