我正在为一件简单的事情而苦苦挣扎。我需要将不同的卡号推送到Firebase数据库中,每个卡号都有自己的报价,所以我需要将不同的报价推送到同一张卡。这是通过使用 HashMap()
来完成的,因此,我想要的是能够添加不同的卡号作为不同的键,并在这些卡号内将不同的优惠作为不同的键而不覆盖它。
现在这就是我所拥有的和我想要的。每张卡内的优惠信息应该不同,比如 ofert1、ofert2 等等,卡号也不同。如果我将相同的卡号添加到我用来传递数据的 editText 中,它应该转到同一张卡,并能够在该卡内创建报价。
问题是,如果我继续添加数据,旧数据就会被新数据替换,我只想能够在同一张卡内添加具有不同优惠的不同卡号。
我所做的就是这个
Map mOffers= new HashMap();
mOffers.put("codigo_oferta",mStringCodigoOferta);
Map mCardNumbers= new HashMap();
mCardNumbers.put(mStringTarjeta, mOffers);
mDatabase.child("Locales").child(uid).setValue(mCardNumbers);
更新
我想要的是像使用不同的键的push(),但是在每个卡号内推送不同的卡号和不同的优惠。
此外,如果我将 push()
添加到引用中,它将推送不同的卡,但使用随 secret 钥,但我不想要它,我希望卡是不同的 key 存储不同的报价。
编辑2:现在它的工作方式就像弗兰克的答案,但我没有继续添加优惠,而是将它们替换。
最佳答案
我想你是在问这个:
Map mOffers= new HashMap();
mOffers.put("ofert1", true);
mOffers.put("ofert2", true);
Map mCardNumbers= new HashMap();
mCardNumbers.put("45672224", mOffers);
mDatabase.child("Locales").child(uid).setValue(mCardNumbers);
或更直接地说:
Map mOffers= new HashMap();
mOffers.put("ofert1", true);
mOffers.put("ofert2", true);
mDatabase.child("Locales").child(uid).child("45672224").setValue(mOffers);
如果您想将现有项目添加到优惠中,您可以在该特定路径上调用 setValue
:
mDatabase.child("Locales").child(uid).child("45672224/ofert3").setValue(true);
如果您想添加/更改/删除多个子节点,但保留其他子节点不变,请使用updateChildren()
。例如,这会添加 ofert3
并删除 ofert2
:
Map mOffers= new HashMap();
mOffers.put("ofert3", true);
mOffers.put("ofert2", null);
mDatabase.child("Locales").child(uid).child("45672224").updateChildren(mOffers);
请注意,这一点我重复了 Firebase 文档中有关 reading and writing data 和 working with lists of data 的大部分内容,因此我建议在这些页面上花一些时间。
关于java - 在 Firebase 数据库中添加不同的键时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49302976/