当前位置: 首页 > 知识库问答 >
问题:

使用RxJava创建可观察的

袁阿苏
2023-03-14

我在创建一个将返回对象列表的可观察对象时遇到了麻烦。我有一个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,新回调{});

我真正的问题是如何把所有的请求联系在一起。我知道使用RxJava是一个解决方案。但是我对RXJava不了解。这与我之前问过的使用mongodb和nodejs解决promise的问题非常相似。那是在Nodejs。但是我想使用RxJava来完成这个任务

共有1个答案

董同
2023-03-14

对于任何游荡的人,我通过创建一个云函数解决了这个问题,该函数获取一个ID列表,在数据库中搜索用户并返回用户列表。这使得我的客户不需要做任何工作。我在我的问题中用了同样的想法与链接中的promise。谢谢

 类似资料:
  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 我在读一篇教程: http://code.tutsplus.com/tutorials/getting-started-with-reactivex-on-android--cms-24387 它特别关注RxAndroid,但它与RxJava中的几乎相同。我不确定我是否完全理解了这个概念。 下面我写了一个方法,然后是一个示例用法。 我的问题是:这是实现我的函数以便我可以在其他线程上异步运行它们的正

  • 我有一个id列表,并且有一个方法,它接受id并返回可观察的 假设我有用户id(1),我需要使用此方法更新他的配置文件

  • 我正在尝试创建一个RxJava BlockingObservable,它将每隔X毫秒发出一个变量的值,直到(条件==true)或超时发生。 下面的代码似乎与我想要的很接近,但它总是发出一次,然后退出。奇怪的是,我在中有一个永远不会正确的条件——我希望这个可观察到的持续发出并最终超时,但事实并非如此。 我错过了什么/做错了什么?

  • 在android 6.0.1 Samsung s6 Edge+上的测试 当device screen脱机并从debug中拔出时,可观察到的只是停止发射项目。如果设备打开,则开始发射对象。另一个问题是,在停止接收项目之前,我会按照相同项目的顺序随机地得到2/3个重复调用 ____________________________edit_________________________________

  • 我试图理解当我使用 在或之后,在我使用时返回true 我知道是一次性的。isDisposed()返回false。有人能解释一下到底发生了什么吗?。我理解一个写得很好的观察。create不能在onComplete()或onError()之后发出项。