这是我在Firebase中添加记录的代码。外面的变量名为restauCount,值为(int)为1
public void sendMessage(){
int restauCount = 1;
String identifier ="Restaurant" + restauCount;
Firebase userRef = firebaseRef.child("Caloocan");
EditText nameInput = (EditText) findViewById(R.id.nameTxt);
String name = nameInput.getText().toString();
EditText locInput = (EditText) findViewById(R.id.locationTxt);
String location = locInput.getText().toString();
EditText typeInput = (EditText) findViewById(R.id.typeTxt);
String foodtype = typeInput.getText().toString();
if (!name.equals("")){
Map<String, String> caloocan = new HashMap<String, String>();
caloocan.put("resname", name);
caloocan.put("resloc", location);
caloocan.put("foodtype", foodtype);
Map<String, Map<String, String>> users = new HashMap<String, Map<String, String>>();
users.put(identifier,caloocan);
userRef.setValue(users);
restauCount++;
}
}
当我再次运行sendessage()时。我将输入字段,当我点击ADD这是sendMessage时,它将被添加到FireBase中,但是当我添加新数据时。它覆盖了旧数据的输入?如何在没有覆盖数据的情况下在火灾中添加多个数据? 创建restauCount是为了增加我输入的餐厅数量
答案 0 :(得分:2)
userRef.push().setValue(users);
每次将新子项添加到指定的Firebase引用
答案 1 :(得分:1)
使用
userRef.setValue(users).push();
而不是userRef.setValue(users);
答案 2 :(得分:1)
您始终使用相同参考
String identifier ="Restaurant" + restauCount;
Firebase userRef = firebaseRef.child("Caloocan");
userRef.setValue(users);
restauCount++;
以这种方式使用setValue()会覆盖指定位置的数据,包括任何子节点。
在您的情况下,由于这个原因,您会覆盖相同的数据。
每次将新子项添加到指定的Firebase参考时,您都应使用push()
方法生成唯一ID。
Firebase userRef = firebaseRef.child("Caloocan");
Firebase newRef = userRef.push();
newRef.setValue(users);
//to get the key
String key = newRef.getKey();
答案 3 :(得分:0)
您需要更新identifier
它保持不变:
int restauCount = 1;
String identifier ="Restaurant" + restauCount;
尝试类似:
long restauCount = System.currentTimeMillis();
String identifier ="Restaurant" + restauCount;
这里每次发送sendMessage()
时你的标识符都有一个特定的id作为当前时间,以毫秒为单位+“餐馆”
如果保持int号码很重要,请告诉我