Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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获取数据_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 以同步方式从firebase获取数据

Java 以同步方式从firebase获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我一直在开发一个Android应用程序,每次用户打开应用程序时,它都会使用addListenerForSingleValueEvent从Firebase实时数据库加载一些数据,并且在会话的剩余时间内,应用程序从不从Firebase读取任何其他数据 一切工作正常,但由于这是一个异步过程,我想防止用户在从firebase完全加载所有内容之前进入主活动,因为这可能会导致视图在它们使用的数据到达之前加载 我想到了一个解决方案:实现一个线程,该线程将检查是否加载了所有数据,并且只在流程结束时让主活动启动

我一直在开发一个Android应用程序,每次用户打开应用程序时,它都会使用
addListenerForSingleValueEvent
从Firebase实时数据库加载一些数据,并且在会话的剩余时间内,应用程序从不从Firebase读取任何其他数据

一切工作正常,但由于这是一个异步过程,我想防止用户在从firebase完全加载所有内容之前进入主活动,因为这可能会导致视图在它们使用的数据到达之前加载

我想到了一个解决方案:实现一个线程,该线程将检查是否加载了所有数据,并且只在流程结束时让主活动启动

因此,我的问题是:

1-我想到的解决方案是好的吗


2-我是否应该使用其他方法,如使用Firebase Rest API或其他任何方法?

您不需要实现其他线程。侦听器在其
onDataChange
方法中为您提供数据。然后,可以通过设置视图的可见性来控制视图

或者,由于数据只提取一次,而且在应用程序启动期间也是如此,因此您可以在启动屏幕中获取数据,然后转到您的
MainActivity

编辑:正如@AbhinavChauhan在评论部分所建议的,您也可以使用progressBar来实现这一点,progressBar将是一种指示器,用于显示某些数据正在加载

网络操作不应该是同步任务

我想防止用户在firebase完全加载所有内容之前进入主活动

在这种情况下,您需要实现一个启动页面。因此,您以异步方式加载数据,并仅在回调完成时将用户重定向到
main活动

实现一个线程,该线程将检查是否加载了所有数据,并且仅在流程结束时让主活动启动

不需要任何其他线程。只有当我们从数据库获取数据完成时,
onDataChange()
才会触发

我想到的解决方案是好的吗

不,原因是上述

我是否应该使用其他方法,如使用Firebase Rest Api或其他方法

您应该仅在需要时使用RESTAPI。但这并不能解决此API的异步方式

以同步方式从firebase获取数据

绝对不是!您应该按照预期异步处理API。有关更多详细信息,您可以从以下帖子查看我的答案:


因此,如果您不向他们展示主要活动,那么您将向他们展示什么,我认为您应该使用进度栏来显示正在发生的事情,并在加载数据时隐藏进度。这个问题非常模糊,因此可以通过多种方式实施,但我同意您的看法。使用progreebar可能是一个很好的方法。很抱歉,我问的问题不清楚,但我已经在闪屏上做了这些。问题是在发布期间,我有大约5-6个侦听器从Firebase获取数据。因此,我需要一些东西,使应用程序保持斜杠屏幕,直到所有5-6
onDataChange
方法完成它们的工作。首先,感谢您的回答和编辑我的问题。我只是在你提供的链接后观看了你的Youtube视频,并在那里得到了我需要的东西。问题是在发布期间,我有大约5-6个侦听器从Firebase获取数据。我想我问这个问题时不是很清楚。我想让我的“线程”做的是等待布尔值为true,这些布尔值是在
onDataChange()
方法的末尾设置的,然后再让主活动开始。我看到您使用了几乎相同的方法,但使用了
onCallBack()
方法,这应该比实现线程要好。听到这个消息很高兴。是的,使用回调几乎是一样的。