Java 以同步方式从firebase获取数据
我一直在开发一个Android应用程序,每次用户打开应用程序时,它都会使用Java 以同步方式从firebase获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我一直在开发一个Android应用程序,每次用户打开应用程序时,它都会使用addListenerForSingleValueEvent从Firebase实时数据库加载一些数据,并且在会话的剩余时间内,应用程序从不从Firebase读取任何其他数据 一切工作正常,但由于这是一个异步过程,我想防止用户在从firebase完全加载所有内容之前进入主活动,因为这可能会导致视图在它们使用的数据到达之前加载 我想到了一个解决方案:实现一个线程,该线程将检查是否加载了所有数据,并且只在流程结束时让主活动启动
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-6onDataChange
方法完成它们的工作。首先,感谢您的回答和编辑我的问题。我只是在你提供的链接后观看了你的Youtube视频,并在那里得到了我需要的东西。问题是在发布期间,我有大约5-6个侦听器从Firebase获取数据。我想我问这个问题时不是很清楚。我想让我的“线程”做的是等待布尔值为true,这些布尔值是在onDataChange()
方法的末尾设置的,然后再让主活动开始。我看到您使用了几乎相同的方法,但使用了onCallBack()
方法,这应该比实现线程要好。听到这个消息很高兴。是的,使用回调几乎是一样的。