无法在Firebase数据库中添加不同的密钥

时间:2018-03-15 15:08:26

标签: java android firebase firebase-realtime-database

我正在努力做一件简单的事情。我需要将不同的卡号输入Firebase数据库,每个卡号都有自己的报价,所以我需要将不同的卡号推送到同一张卡。这是通过使用HashMap()来完成的,所以,我想要的是能够将不同的卡号添加为不同的密钥,并且在这些卡号内部,不同的密钥作为不同的密钥而不覆盖它。

现在这就是我拥有的和我想要的。每张卡内的事件应该是不同的,比如ofert1,ofert2等等,卡号也是。如果我将相同的卡号添加到我用来传递数据的editText,它应该转到同一张卡,并能够在该卡内创建优惠。

Database Structure

问题是,如果我继续添加数据,旧数据会被新数据替换,我只想在同一张卡中添加不同的卡号以及不同的优惠。

我所做的就是这个

 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(),它会推送不同的卡,但是使用随机密钥,而我不想要它,我希望该卡是存储不同的不同密钥提供。

enter image description here

编辑3:现在它的工作就像弗兰克回答的那样,但不是继续添加优惠,而是让他们更换优惠。

Structure

1 个答案:

答案 0 :(得分: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);

请注意,我要重复reading and writing dataworking with lists of data上Firebase文档中解释的大部分内容,因此我建议您在这些页面上花一些时间。