Android Studio中如何获取Firebase Push生成的ID?
解决Firebase Push ID关联存储问题
你现在的核心问题是两次调用push()会生成两个完全独立的唯一ID,所以你当前的代码其实是在用户的Ads节点下新增了一个随机子节点,然后把另一个全新的随机ID存进去,这自然和你之前发布广告的ID不匹配。
正确的思路是:只调用一次push()获取广告节点的唯一ID,把这个ID保存到变量中,再同时完成「发布广告」和「将ID写入用户节点」两个操作。
修正后的代码示例
// 关键:只调用一次push()获取广告节点的引用和对应ID DatabaseReference adReference = mDatabaseReference.child(TipoAnuncio).push(); String adUniqueId = adReference.getKey(); // 1. 将广告数据写入Firebase广告节点 adReference.setValue(fichaPet); // 2. 将同一个广告ID写入对应用户的Ads节点 // 推荐用广告ID作为键,值设为true(方便后续快速查询用户的广告) mDatabaseReference.child("Usuarios").child(userId).child("Ads").child(adUniqueId).setValue(true);
补充说明
如果你更倾向于在用户Ads节点下用自动生成的子节点存储广告ID(而不是用广告ID作为键),可以这样写,但要确保存入的是之前获取的adUniqueId:
// 在用户Ads下新增子节点,值为广告ID mDatabaseReference.child("Usuarios").child(userId).child("Ads").push().setValue(adUniqueId);
不过第一种用广告ID作为键的方式更实用——后续查询用户的所有广告时,能直接通过键快速定位,也能避免重复存储同一个广告ID。
为什么你的原代码不行?
Firebase的push()方法每次调用都会生成一个基于时间戳的唯一ID,两次调用必然得到不同的结果,所以你原代码里存入的是一个全新的ID,和之前发布广告的ID毫无关联。
内容的提问来源于stack exchange,提问作者Morota
相关产品推荐
相关产品推荐

