【问题标题】:Creating an Observable using RxJava使用 RxJava 创建 Observable
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多