【发布时间】:2020-03-11 20:21:54
【问题描述】:
我正在使用 MVVM 架构开发一个 Android 应用。这是从我的存储库中返回 MutableLiveData 的函数,可以从 ViewModel 中观察到。
public MutableLiveData<ArrayList<CoffeeShop>> getCoffeeShops(){
setCoffeeShops();
MutableLiveData<ArrayList<CoffeeShop>> data = new MutableLiveData<>();
data.setValue(coffeeShops);
return data;
}
public void setCoffeeShops() {
CollectionReference coffeeShopsRef = database.collection("coffee_shops");
coffeeShopsRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>(){
@Override
public void onComplete(@NonNull Task< QuerySnapshot > task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
CoffeeShop coffeeShop = new CoffeeShop();
coffeeShop.setName((String) document.get("name"));
coffeeShop.setLocation((GeoPoint) document.get("location"));
coffeeShop.setOffers((ArrayList<String>) document.get("offers"));
coffeeShop.setRating((Long) document.get("rating"));
coffeeShop.setReviews((ArrayList<Review>) document.get("reviews"));
coffeeShops.add(coffeeShop);
}
}
}
});
}
setCoffeeShops() 函数对数据库执行异步调用并设置 coffeeShops 变量的值。我需要找到一种方法来等待异步调用得到解决,然后才将值分配给 MutableLiveData 对象。这是解决问题的正确方法吗?如果是,您会推荐什么?
谢谢!
【问题讨论】:
-
您可以查看this。
标签: android firebase android-livedata android-mvvm