Java Firebase数据库用setValue()覆盖以前的值
所以我在Firebase中有一个数据库 此代码位于onCreate()中: 此代码位于另一个名为onClick的方法中:Java Firebase数据库用setValue()覆盖以前的值,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,所以我在Firebase中有一个数据库 此代码位于onCreate()中: 此代码位于另一个名为onClick的方法中: mDatabaseRefUser.child("Chat").child(mAuth.getCurrentUser().getUid()) .child(userID).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText
mDatabaseRefUser.child("Chat").child(mAuth.getCurrentUser().getUid())
.child(userID).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
mAuth.getCurrentUser().getEmail()));
mDatabaseRefUser.child("Chat").child(userID)
.child(mAuth.getCurrentUser().getUid()).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
userEmail));
我试图做的是在每次调用该方法时添加一个新值,而不删除以前/现有的值
目前,每次单击并启动该方法时,都会删除以前的/现有的值,并添加新的值。但我都不想被删除。我希望这也能增加新的价值。我尝试过使用getRef和push(),但我的数据仍然被覆盖。我做错了什么
这是我第一次调用该方法:
"Users" : {
"Chat" : {
"Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
"xfqAFlRpbUZRlZb76svN5FUtbU93" : {
"-LCvIA_9L1Y9rjkm96Aj" : {
"Messages" : {
"-LCvqDidnNqQ8ALZhDud" : {
"messageText" : "Very good",
"messageTime" : 1526791230552,
"messageUser" : "mama@mama.com"
}
},
"chatAgainstUserEmail" : "mama2@mama.com",
"chatAgainstUserID" : "xfqAFlRpbUZRlZb76svN5FUtbU93",
"uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
"userEmail" : "mama@mama.com",
"userID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2"
}
}
},
"xfqAFlRpbUZRlZb76svN5FUtbU93" : {
"Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
"-LCvIA_9L1Y9rjkm96Aj" : {
"Messages" : {
"-LCvqDigI8ZwHDYuPhw9" : {
"messageText" : "Very good",
"messageTime" : 1526791230555,
"messageUser" : "mama2@mama.com"
}
},
"chatAgainstUserEmail" : "mama@mama.com",
"chatAgainstUserID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2",
"uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
"userEmail" : "mama2@mama.com",
"userID" : "xfqAFlRpbUZRlZb76svN5FUtbU93"
}
}
}
}
这是我第二次调用它时使用的JSON
"Users" : {
"Chat" : {
"Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
"xfqAFlRpbUZRlZb76svN5FUtbU93" : {
"-LCvIA_9L1Y9rjkm96Aj" : {
"Messages" : {
"-LCvr0zoHOPxsKOVJzeu" : {
"messageText" : "Very good 2nd call",
"messageTime" : 1526791440547,
"messageUser" : "mama@mama.com"
}
},
"chatAgainstUserEmail" : "mama2@mama.com",
"chatAgainstUserID" : "xfqAFlRpbUZRlZb76svN5FUtbU93",
"uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
"userEmail" : "mama@mama.com",
"userID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2"
}
}
},
"xfqAFlRpbUZRlZb76svN5FUtbU93" : {
"Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
"-LCvIA_9L1Y9rjkm96Aj" : {
"Messages" : {
"-LCvr0zrh8wQ2WurUezs" : {
"messageText" : "Very good 2nd call",
"messageTime" : 1526791440550,
"messageUser" : "mama2@mama.com"
}
},
"chatAgainstUserEmail" : "mama@mama.com",
"chatAgainstUserID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2",
"uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
"userEmail" : "mama2@mama.com",
"userID" : "xfqAFlRpbUZRlZb76svN5FUtbU93"
}
}
}
}
我也尝试过使用
getRef().push()
,但也没有成功。我也尝试过不使用。getRef()
和不使用。push()
,也不起作用。要更新值而不是覆盖它,应该使用方法
您之所以覆盖它,是因为Firebase数据库中的每个节点都是一个
映射
,在映射
的情况下,它会用新值替换旧值。要更新数据,您应该使用此类代码,而不是使用child.setValue()
,顾名思义,它将直接用新值替换旧值。但是如果你想改变一个特定的值,那么你应该做如下的事情。试试看,伙计
HashMap<String, Object> params = new HashMap<>();
params.put("yourKey", your value);
yourDatabaseChildReference.updateChildren(params);
HashMap params=newhashmap();
参数put(“您的键”,即您的值);
yourDatabaseChildReference.updateChildren(参数);
我解决这个问题的唯一办法是建立一个新的数据库
我补充说:
mDatabaseRefUser.child("Chatting").child(mAuth.getCurrentUser().getUid())
.child(userID).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
mAuth.getCurrentUser().getEmail()));
mDatabaseRefUser.child("Chatting").child(userID)
.child(mAuth.getCurrentUser().getUid()).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
userEmail));
并删除了旧的嘿,如果你认为我的答案有问题,请留下评论。谢谢我也试过了,它仍然会覆盖。这两个json文件之间的区别是什么?区别在于当我添加新值“非常好的第二次调用”时,旧值“非常好”会被删除。还有一个问题。什么是
Xta3jwm4yLQWaJBypMBFt2esiOr2
什么是xfqAFlRpbUZRlZb76svN5FUtbU93
?使用updateChildren(hasmap),它给了我与添加push()相同的结果
mDatabaseRefUser.child("Chatting").child(mAuth.getCurrentUser().getUid())
.child(userID).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
mAuth.getCurrentUser().getEmail()));
mDatabaseRefUser.child("Chatting").child(userID)
.child(mAuth.getCurrentUser().getUid()).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
userEmail));