Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Firebase Android中链接两个EventListener,以便第一个不会';在第二个完成之前,你不能继续吗?_Java_Android_Firebase_Async Await - Fatal编程技术网

Java 如何在Firebase Android中链接两个EventListener,以便第一个不会';在第二个完成之前,你不能继续吗?

Java 如何在Firebase Android中链接两个EventListener,以便第一个不会';在第二个完成之前,你不能继续吗?,java,android,firebase,async-await,Java,Android,Firebase,Async Await,我试图从监听器A从Firebase获取一些数据,然后我将根据从监听器A获得的一些ID在监听器B的不同节点下搜索,当我从监听器B接收数据时,我想将其附加到监听器A数据。 基本上,我在Firebase中有两个节点:posts和users。帖子包含一些数据和用户ID。当我想显示数据库中的所有帖子时,我会将每个帖子都添加到一个RecyclerView中,但在我将它们添加到该视图之前,我需要获取一些用户数据,然后(合并这两个收集的数据)将其添加到RecyclerView中 我在网上找不到任何可以尝试的东西

我试图从监听器A从Firebase获取一些数据,然后我将根据从监听器A获得的一些ID在监听器B的不同节点下搜索,当我从监听器B接收数据时,我想将其附加到监听器A数据。 基本上,我在Firebase中有两个节点:posts和users。帖子包含一些数据和用户ID。当我想显示数据库中的所有帖子时,我会将每个帖子都添加到一个RecyclerView中,但在我将它们添加到该视图之前,我需要获取一些用户数据,然后(合并这两个收集的数据)将其添加到RecyclerView中

我在网上找不到任何可以尝试的东西(除了一些UI阻塞的东西,因为我是Android新手,所以我宁愿远离这些东西)。我知道Firebase是异步的,Java没有承诺或异步/等待,所以IDK还有什么可以尝试的。在我当前的实现中,我没有实现我想要的(显然)

我希望显示新的数据,将来自用户的数据与帖子结合起来

I expected to be printed:
[1] ACC NAME John
[2] ACC NAME John
[3] ACC NAME John
but it's actually 
[2] BniepYpQuh6VgMF6L2
[3] BniepYpQuh6VgMF6L2
[1] John

您没有获取新数据的原因是,您正在将
indivPost
添加到列表中,并在第二个侦听器中获取用户数据之前通知第一个侦听器中的循环视图。这种方式无法实现您想要的,因为您的
for循环
是同步的,而侦听器是异步的。将firebase结构更改为在帖子中存储用户名,这样您就不必再打第二次电话来获取用户名。

我知道这一点,但修复似乎更像是一种解决方法。问题是,即使我这样做了,我想学习如何真正使它工作。难道没有办法阻止第一个侦听器直到第二个侦听器完成吗?这就是我想知道的&如果我能得到正确的指示,我会做的。@MariusMircea这不是一个解决办法。假设你有10万篇帖子,你会调用内部监听器10万次并一直阻止用户吗?我不认为这是一种更好的方法。我想你是对的,我只是认为向posts结构添加数据不是一种好的做法(在这个意义上,如果我以后需要其他东西,我会怎么做?将数据添加到posts使其成为一个巨大的JSON?)谢谢你的建议,我会尝试以这种方式修复它。
I expected to be printed:
[1] ACC NAME John
[2] ACC NAME John
[3] ACC NAME John
but it's actually 
[2] BniepYpQuh6VgMF6L2
[3] BniepYpQuh6VgMF6L2
[1] John