推送到Firebase时预设对象ID

时间:2017-02-01 21:23:24

标签: android firebase firebase-realtime-database

我使用SortedList对RecyclerView中的项目进行排序。 所以我需要通过一些独特的ID来比较它们,Firebase为它提供了很棒的生成密钥。

要将新值推送到我需要运行的数据库:

public void addAdvert(Advert advert, String userId) {
        String id = reference.child(NODE_USERS)
        .child(userId)
        .child(NODE_ITEMS)
        .push()
        .getKey()   //execute this to just get the id

        advert.setId(id);
        getCurrentItemNode().child(advert.getId()).setValue(advert);

}

现在我的数据库中的广告项目完全配备了Id和节点密钥。

但是我'好奇,我可以写点像

reference.child(NODE_USERS)
            .child(userId)
            .child(NODE_ITEMS).push().setValue(advert); 

并获得相同的结果:密钥和ID都在数据库中设置。

1 个答案:

答案 0 :(得分:1)

如果要将密钥存储在项目中,则必须执行两次写入操作首先生成密钥然后再写入。

但是为什么要将项目中的密钥存储起来?

作为旁注,这段代码:

    String id = reference.child(NODE_USERS)
    .child(userId)
    .child(NODE_ITEMS)
    .push()
    .getKey()

与此完全相同:

    String id = reference.push().getKey()

Firebase的推送ID是客户端生成的,统计上保证是唯一值。它们不依赖于路径,并且没有确定这些值所需的数据库往返。

有关详细信息,请参阅此博客文章:The 2^120 Ways to Ensure Unique Identifiers