почему моя карта liveata не вызывается, хотя мне нужно изменить значение? - PullRequest
0 голосов
/ 11 марта 2020

Я новичок в 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, это только для теста, потому что я все еще изучаю Ливата

1 Ответ

0 голосов
/ 11 марта 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...