实时数据库快照的存储位置

时间:2019-08-12 15:44:45

标签: java android firebase-realtime-database

我有一个RealTime数据库,其结构如下:

garage-x23df
    cars
        -LQ0aZ9IP5jCL9Qj5x4D
        -LQ0a_R1Oxh4KazLHVZb
        -LQ0ao2lvhdurSl8qaF1
        -LSsIrK0tziyiJLKfDX1
        ...

我想在不同的活动中操纵这些数据(一个活动显示汽车的列表,另一个活动显示特定汽车的数据,另一个活动来操纵已过滤的汽车列表,等等)。

我应该在每个活动中获取一个新的DataSnapshot还是将数据存储在本地并将其存储在活动之间进行发送(我已经通过从DataSnapshot中构建一个可序列化的ArrayList来实现了这一点,而我一直通过目的)。

我大约有400辆汽车,每辆汽车包括大约15个字段(仅字符串和布尔值),但希望扩展这个数字。

在活动之间发送如此大的ArrayList时,我会担心性能问题,但另一方面,我认为在每个活动中获取DataSnapshot效率不高。

最佳做法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

创建一个单独的Java类,以便在需要检索项目时可以从数据库和所有get方法检索数据。例如,假设您的数据库中有一个名为“ mad”的孩子,其下还有其他三个节点,分别为jack,John和jimmy,每个节点的值都不同,例如jack的字符串值为“ tick”,John的字符串值为“年轻”和“吉米”的价值是“ yipy”。您的课程看起来像这样

   public class Retrieve{
     private String Jack;
     private String Jimmy;
     private String John;
   public Retrieve (String Jack, String Jimmy, String John)
     Jack=jack;
     Jimmy=jimmy;
     John=john;
   public Retrieve(){}
   @PropertyName(“jack”)
   public String getJack(){return Jack;}
   @PropertyName(“jimmy”)
   public String getJimmy(){return Jimmy;}
   @PropertyName(“John”)
   public String getJohn(){return John;}

然后,您可以使用相同的代码样式检索它们并将其设置在应用程序的任何部分。举例来说,假设您要在主要活动

中设置从jack到文本视图的值
   ........
   @Override
   public void onDataChanged(@Nullable DataSnapshot datasnapshot){
   for(DataSnapshot snapshot:dataSnapshot. 
   getChildren()){
   if(snapshot!=null){
    Retrieve retrieve =snapshot.getValue(Retrieve.class);
    if(retrieve!=null){
    String no=retrieve.getJack();
    Dast.setText(no)