Android 推送到Firebase时预设对象Id

Android 推送到Firebase时预设对象Id,android,firebase,firebase-realtime-database,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)

我正在使用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。

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

但是为什么要首先将密钥存储在项目中

作为旁注,此代码:

    String id = reference.child(NODE_USERS)
    .child(userId)
    .child(NODE_ITEMS)
    .push()
    .getKey()
与此完全相同:

    String id = reference.push().getKey()
Firebase的推送ID是客户端生成的,在统计上保证为唯一值。它们不依赖于路径,也不需要往返数据库来确定这些值


有关更多信息,请参阅本文:。

这是@puf的错误吗?似乎字符串id=reference.childNODE\u USERS.getKey将返回NODE\u USERS是什么;也许你是指reference.push.getKey?也许我有点困惑。是的,那确实是复制/粘贴/修改了错误的部分。谢谢你接电话!谢谢你的回答。我想在下一次从数据库获取项目时,将键存储在项目中以使项目唯一。将JSON对象存储在键下可确保其唯一性。然后还将该键作为属性值存储在同一个JSON对象中只会混淆问题。True。没想到我能跳过关键的东西。现在就试试。