android - 使用 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 个这样的监听器。
那么有什么好的方法呢?
解决方案
不幸的是,没有一次获取多个位置的方法,如果您希望多次重复使用它,您可以使用自定义脚本执行此操作,但它总是会导致获取每个项目的循环。
同样重要的是要注意发送查询的顺序也是服务器处理它们的顺序。
推荐阅读
- reactjs - 在登录到反应应用程序时检查会话是否存在
- jquery - 如何通过带有首字母的ajax显示画布?jQuery画布
- python - scipy.stats.kstest 沿轴
- python - BeautifulSoup 无法正确找到元素
- python - 为什么使用冒号与范围进行 numpy 索引会导致奇怪的行为?
- python - Google Colab 在随机迭代中停止训练
- r - 使用 str_replace 替换“(?)”
- javascript - 如何动态发送 FCM 推送通知?
- ios - 如何在重建的网格上放置锚以获得准确性
- excel-formula - 我正在寻找一个公式,通过它我可以将两个单元格(一个单元格包含 TEXT,其他单元格包含 HYPERLINK URL)加入单个 HYPERLINKED 单元格