почему моя карта Liveata не вызывается, даже если я изменил значение?

Я новичок в MVVM и компоненте архитектуры Android. так что у меня есть такой репозиторий

object RestaurantRepository {

    val restaurants : LiveData<ArrayList<Restaurant>> = RestaurantClient.restaurants

    private var count : LiveData<Int> = Transformations.map(restaurants) {

        Log.d("debugLog","map")

        it.size
    }

    fun searchRestaurants(query: String, latitude:Double, longitude: Double) {

        mQuery = query

        RestaurantClient.searchRestaurants(
            query = query,
            latitude = latitude,
            longitude = longitude,
            start = 0
        )
    }

}

и у меня есть клиент, который получает данные с помощью Retrofit

object RestaurantClient {

    val restaurants = MutableLiveData<ArrayList<Restaurant>>()


    private val restaurantService = RetrofitServiceGenerator.getInstance(RestaurantAPI::class.java)

    fun searchRestaurants(query: String, latitude:Double, longitude: Double, start: Int) {

        val call = restaurantService.searchRestaurants(
            radius = 2000,
            query = query,
            latitude = latitude,
            longitude = longitude,
            start = start,
            count = NUMBER_OF_DOCUMENT_PER_PAGE
        )



        call.enqueue(object: Callback<RestaurantListBaseResponse> {

            override fun onFailure(call: Call<RestaurantListBaseResponse>, t: Throwable) {

                // if there is an error while sending data to server or while parsing the data

            }

            override fun onResponse(call: Call<RestaurantListBaseResponse>, response: Response<RestaurantListBaseResponse>) {

                if (response.isSuccessful) {

                    val listOfRestaurants = response.body()!!.restaurants
                    val restos = ArrayList<Restaurant>()

                    for (i in listOfRestaurants ) {
                        restos.add(i.restaurant)
                    }

                    restaurants.postValue(restos)


            }

        })


    }

Я считаю, что получаю данные с сервера и отправляю их через restaurants MutableLiveData в моем RestaurantClient. поэтому я предполагаю, что из-за изменения в Livedata он вызовет Transformations.map, но этот журнал count никогда не отображается в моем Logcat.

этот счетчик является частным только в RestaurantRepository, это просто для теста, потому что я все еще изучаю liveata




Ответы (1)


Согласно документам

The transformations aren't calculated unless an observer is observing the returned LiveData object. Итак, вам нужно подписаться на count LiveData, чтобы преобразования работали.

person Yrii Borodkin    schedule 11.03.2020