代码之家  ›  专栏  ›  技术社区  ›  Alexa289

如果我从3个不同的RESTAPI获取数据,我的repositoy中需要多少LiveData?

  •  0
  • Alexa289  · 技术社区  · 6 年前

    1. 一项展示顶级推荐餐厅列表的活动
    2. 一个显示搜索结果餐馆列表的活动

    因此,我从后端有3个不同的端点,我将使用retroft获取它们。这3个端点将为我提供餐馆数据,相同的POJO

    因此,对于这3个活动,我需要制作3个不同的ViewModel,我将有一个存储库,对吗?我的问题是,我需要制作多少LiveData才能将数据发送到我的活动?

    像这样在一个存储库中存储3个liveData

    class VideoRepository {
    
        val recommendedRestaurants: LiveData<List<Restaurant>> = ...
        val searchResultsRestaurants: LiveData<List<Restaurant>> = ...
        val visitedRestaurants: LiveData<List<Restaurant>> = ...
    
        fun getRecommendedRestaurant() {
            RestaurantRetrofitClient.getRecommendedRestaurant()
        }
    
        fun getRestaurantsUsingFilter() {
            RestaurantRetrofitClient.getRestaurantsUsingFilter()
        }
    
        fun getVisitedRestaurants() {
            RestaurantRetrofitClient.getVisitedRestaurants
        }
    
    }
    

    class VideoRepository {
    
            val restaurants: LiveData<List<Restaurant>> = ...
    
            fun getRecommendedRestaurant() {
                RestaurantRetrofitClient.getRecommendedRestaurant()
            }
    
            fun getRestaurantsUsingFilter() {
                RestaurantRetrofitClient.getRestaurantsUsingFilter()
            }
    
            fun getVisitedRestaurants() {
                RestaurantRetrofitClient.getVisitedRestaurants
            }
    
        }
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Android Rajaganapathi    6 年前

    更好的解决方案是,可以为三个屏幕创建三个repo,并拆分API调用。

    如果您使用的是sharedViewModel概念,那么您可以在代码中选择选项a。因为sharedViewModel只有一个实例,用于三个屏幕。

    class VideoRepository {
    
        val recommendedRestaurants: LiveData<List<Restaurant>> = ...
        val searchResultsRestaurants: LiveData<List<Restaurant>> = ...    
        val visitedRestaurants: LiveData<List<Restaurant>> = ...
    
        fun getRecommendedRestaurant() {
            RestaurantRetrofitClient.getRecommendedRestaurant()
        }
    
        fun getRestaurantsUsingFilter() {
            RestaurantRetrofitClient.getRestaurantsUsingFilter()
        }
    
        fun getVisitedRestaurants() {
            RestaurantRetrofitClient.getVisitedRestaurants
        }
    
    }
    

    如果您能够使用liveData处理数据,您可以选择选项B

     class VideoRepository {
    
        val restaurants: LiveData<List<Restaurant>> = ...
    
        fun getRecommendedRestaurant() {
            RestaurantRetrofitClient.getRecommendedRestaurant()
        }
    
        fun getRestaurantsUsingFilter() {
            RestaurantRetrofitClient.getRestaurantsUsingFilter()
        }
    
        fun getVisitedRestaurants() {
            RestaurantRetrofitClient.getVisitedRestaurants
        }
    
    }
    
    推荐文章