我认为这是一个疯狂的问题,但是我刚接触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
答案 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中启用脱机数据,这样就不需要每次都不需要先从服务器重新加载。首先,从缓存源填充数据,然后从服务器源静默加载数据。