从Firebase检索数据需要太多时间

时间:2018-11-21 09:31:02

标签: android

我认为这是一个疯狂的问题,但是我刚接触Firebase ...这是我的问题... 我想将Firebase数据检索到textview,imageview和listview!这是我的示例数据库结构..它具有许多其他这样的节点  https://i.stack.imgur.com/JURr3.png
  因此,我在文本视图中添加了用户名,在图像视图中添加了个人资料照片,在文本视图中添加了生日,还有很多其他节点,例如消息和其他用户名(在活动中)。没关系,但问题是“检索数据需要花费很多时间到每个视图,然后同时显示所有数据。”。我的意思是加载后不会同时显示每个数据,而是在加载后向所有视图显示所有请求的数据。我想要的是视图加载并显示后的视图...

由于我的英语能力很差,我不知道如何解释我的问题以及如何称呼它...  这是获取数据后该活动的UI。(生日和一些数据尚未添加)。 https://i.stack.imgur.com/GRX0O.png这是使用默认图像和文本进行检索时的照片。 https://i.stack.imgur.com/iEhv9.png

4 个答案:

答案 0 :(得分:0)

不知道如何填充数据,理想情况下,这应该是您应该执行的一组步骤。 1)从该节点获取所有数据(以及所有子数据),并将其放入列表中。 2)将数据传递到RecyclerView并填充它,否则不会出现任何滞后。

这是获取所有子节点的示例代码

myQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
            // TODO: Add to list to send it to recyclerview
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());     
    }
});

希望这会对您有所帮助。

答案 1 :(得分:0)

第1步:

如果您使用Firebase Realtime Database,则也可以将Sqlite用作本地数据库来存储您的数据。每次首次加载数据时,它也将存储在本地数据库中。因此,下次您打开该应用程序时,您将看到您期望的结果!

第2步:

如果您使用Firebase Realtime Database作为后端,请利用firebase提供的“脱机数据处理”功能。这也可以解决您的问题!

答案 2 :(得分:0)

我个人建议不要直接从客户端获取Firebase数据,因为由于无意实现和使用Firestore API可能导致身份验证和性能问题。

相反,请使用Firebase cloud functions并根据需要编写服务。要通过应用调用这些服务,可以使用Firebase calls。您可能会遭受冷启动的困扰,但是可以通过一个预热过程来解决它。可通过cron-job.org

设置的cron作业每分钟调用这些函数

答案 3 :(得分:0)

您可以在Firebase中启用脱机数据,这样就不需要每次都不需要先从服务器重新加载。首先,从缓存源填充数据,然后从服务器源静默加载数据。

Enable Offline Data in Firebase