Firebase推送ID与传统ID或UID

时间:2017-07-14 19:38:39

标签: android firebase-realtime-database

在关系数据库中,我在每个表中使用uid列作为主键。在Android代码中,我使用以下类格式:

class A {
    String uid;
    // Other fields
}

我已切换到Firebase DB。我在将数据保存到数据库时避免使用数组,所以一切都是键值格式,关键是通过调用push()创建的推送ID。由于Firebase生成了一个密钥,我本能地假设它是我的uid字段的对应部分,并从类中删除uid。数据库记录如下:

"-KonAikaef0Q0crP0AgK": {
    // All fields of class A except 'uid' in key-value format
}

没有uid的课程如下:

class B {
    // All fields of class A except 'uid'
}

当我尝试从Firebase数据库中检索数据时,我获得了键值对的DataSnapshot,所有值都是B类的实例。在某些情况下,我尝试像之前那样编写代码,例如,我创建了一个List<B>,使用结果DataSnapshot中的值填充它,并将此列表提供给要在ListView中显示的ArrayAdapter<B>。现在,所有密钥都丢失了,这是至关重要的。

我如何克服我面临的问题?

  • 我应该uid看到here吗?
  • 我应该在每次检索时手动保留虚拟uid字段并将密钥映射到此字段吗?
  • 任何其他解决方案......

1 个答案:

答案 0 :(得分:1)

您应该创建一个List<B>,而不是创建Map<String,B>,而地图中的键是数据库中的键。这样你就可以循环遍历条目,或仅仅是键,或仅仅是值。

如果您只是想要这些值,则可以通过map.values()获取它们。