使用RxJava创建一个Observable

时间:2018-07-27 21:18:03

标签: java android firebase rx-java2

我在创建将返回对象列表的可观察对象时遇到麻烦。我有一个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做到这一点

1 个答案:

答案 0 :(得分:0)

对于任何徘徊的人,我通过创建一个云函数解决了这个问题,该函数接受一个id列表,并在数据库中搜索用户并返回用户列表。这样一来,我的客户就不需要做任何工作。我在问题链接中使用了相同的想法和承诺。谢谢