首页 > 解决方案 > 使用 Android Firebase 一次加载多个 SingleValueEvent

问题描述

我想使用单击按钮时必须从 Firebase 数据库获取的信息来启动一个片段。举个例子,假设我想打开一个用户配置文件,我需要从中加载所有数据database > users > uid并且我需要来自database > messages(例如用户的帖子)的信息。


现在我的方法是这样的:

(以下代码是@Override public void onClick(View v) { }启动 Fragment 的按钮方法的一部分)

dbRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                       User user = snapshot.getValue(User.class);

                       // start the fragment here ...
                }
});

但是由于我也需要信息database > messages,所以我不确定如何以一种好的方式做到这一点。以下是可能的:

(以下代码是@Override public void onClick(View v) { }启动 Fragment 的按钮方法的一部分)

dbRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                       User user = snapshot.getValue(User.class);

                       // just add another listener on the other reference
                       dbRef_2.addListenerForSingleValueEvent(new ValueEventListener() {
                               @Override
                               public void onDataChange(DataSnapshot snapshot) {
                                      MessagesInfo message = snapshot.getValue(MessagesInfo.class);

                                      // start the fragment here ...
                               }
                      });
               }
});

但这似乎不是最好的方法,因为我们刚刚嵌套了两个 SingleValueEvent 侦听器。如果我们需要更多信息,比如 10 个不同的数据库“位置”,我们需要嵌套 10 个这样的监听器。

那么有什么好的方法呢?

标签: androidfirebasefirebase-realtime-database

解决方案


不幸的是,没有一次获取多个位置的方法,如果您希望多次重复使用它,您可以使用自定义脚本执行此操作,但它总是会导致获取每个项目的循环。

同样重要的是要注意发送查询的顺序也是服务器处理它们的顺序。


推荐阅读