Android 推送到Firebase时预设对象Id
我正在使用SortedList在RecyclerView中对我的项目进行排序。 所以我需要通过一些唯一的Id来比较它们,Firebase为此提供了很棒的生成密钥 要将新值推送到数据库,我需要运行: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)
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。没想到我能跳过关键的东西。现在就试试。