我使用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都在数据库中设置。
答案 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。