我在创建将返回对象列表的可观察对象时遇到麻烦。我有一个ID列表,想向我的数据库发出请求。在这种情况下,我正在使用Firebase。得到结果后,我想将这些对象中的每一个编译成一个列表,然后返回该列表。在返回之前,我需要等待所有对象返回。我正在视图模型反序列化器类中执行此操作。这是我的代码。
private class Deserializer implements Function<QuerySnapshot, ArrayList<User>>{
@Override
public ArrayList<User> apply(QuerySnapshot input) {
List<DocumentSnapshot> temp = input.getDocuments();
final ArrayList<User> users = new ArrayList<>();
List<String> idList = new ArrayList<>();
for (DocumentSnapshot snapshot: temp){
String userId= snapshot.get("userId").toString();
idList.add(userId);
}
//Create observable and make request to firebase
//compile all the returned into a list return that list
}
}
我可以通过多种方式从Firebase数据库中获取数据,可以返回Documentsnapshot任务,也可以使用回叫方式将数据恢复为
public void getUser(String userId, final Callback callback){
DocumentReference docRef = db.collection(DATABASE_COLLECTION_USERS).document(userId);
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
callback.result(documentSnapshot.toObject(User.class));
}
});
}
,然后在调用此函数时添加回调。像getUser(id,new Callback {});
我真正遇到的问题是如何将所有请求捆绑在一起。我知道使用RxJava是一种解决方案。但是我不了解RxJava。这与我之前提出的问题resolving a promise using mongodb and nodejs非常相似。那是在nodejs中。但我想使用RxJava做到这一点
答案 0 :(得分:0)
对于任何徘徊的人,我通过创建一个云函数解决了这个问题,该函数接受一个id列表,并在数据库中搜索用户并返回用户列表。这样一来,我的客户就不需要做任何工作。我在问题链接中使用了相同的想法和承诺。谢谢