【发布时间】:2018-07-31 00:13:52
【问题描述】:
我在创建将返回对象列表的可观察对象时遇到问题。我有一个 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 来做到这一点
【问题讨论】:
-
你好@akarnokd 感谢您的回复。查看该页面,接近我要求的解决方案是并行处理。但它并没有做我想做的事。
-
使用 .tolist() 收集列表中的所有数据怎么样?
标签: java android firebase rx-java2