我是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
)
}
}
而且我有客户使用翻新来获取数据
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
中的RestaurantClient
MutableLiveData发布。所以我认为因为Livedata发生了变化,所以它将触发Transformations.map,但是登录count
的信息永远不会出现在我的Logcat中。
此计数仅在RestaurantRepository
中是私有的,这仅用于测试,因为我仍在学习实时数据
The transformations aren't calculated unless an observer is observing the returned LiveData object.
因此,您需要订阅count
LiveData才能使转换工作。