Firebase 实时数据库在添加新数据时覆盖旧数据
Firebase Realtime Database overwrites old data while adding new
您好,我遇到了 FB 实时数据库在插入新数据时删除旧数据的问题,这是我的代码
String text = reviewText.getText().toString();
if (text.length() > 15){
int rating = (int) ratingBar.getRating();
String uuid = firebaseAuth.getCurrentUser().getUid();
Map<String, String> data = new HashMap();
data.put("rating", String.valueOf(Integer.parseInt(String.valueOf(rating))));
data.put("comment", text);
DatabaseReference db = firebaseDatabase.getReferenceFromUrl("dburl").child("attr_reviews").child(placename);
db.setValue(uuid).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
db.child(uuid).setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
}else {
Toast.makeText(getActivity(), R.string.eReviewErrUnkw, Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(getActivity(), R.string.eReviewErrUnkw, Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(getActivity(), R.string.eReviewErrTxt, Toast.LENGTH_LONG).show();
}
我试过将 push() 放在不同的位置,但仍然相同。
数据库结构如下所示
它应该在图像上创建这样的数据库结构
编辑:
数据库结构应该是这样的
enter code here
DB
└attr_reviews
└city1
└useruuid1
└comment: ""
└rating: x
└useruuid2
└....
└city2
└....
数据库中的数据正在被覆盖,您需要做的是使用push()
这会在数据库中为您创建一个随机ID:
db.child(uuid).push().setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() {
这样您将拥有以下数据库:
uuid
random-id1
comment: "comment"
rating: 1
random-id2
comment: "comment"
rating: 1
这样你就停在了“萨拉热窝”
DatabaseReference db = firebaseDatabase.getReferenceFromUrl("dburl").child("attr_reviews").child(placename);
//Sarajevo
// ==> PUSHING VALUES
db.setValue(uuid).addOnCompleteListener(new OnCompleteListener<Void>() { ...
我觉得你应该去嵌套。像
DatabaseReference db = firebaseDatabase.getReferenceFromUrl("dburl").child("attr_reviews").child(placename).child(userid);
您好,我遇到了 FB 实时数据库在插入新数据时删除旧数据的问题,这是我的代码
String text = reviewText.getText().toString();
if (text.length() > 15){
int rating = (int) ratingBar.getRating();
String uuid = firebaseAuth.getCurrentUser().getUid();
Map<String, String> data = new HashMap();
data.put("rating", String.valueOf(Integer.parseInt(String.valueOf(rating))));
data.put("comment", text);
DatabaseReference db = firebaseDatabase.getReferenceFromUrl("dburl").child("attr_reviews").child(placename);
db.setValue(uuid).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
db.child(uuid).setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
}else {
Toast.makeText(getActivity(), R.string.eReviewErrUnkw, Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(getActivity(), R.string.eReviewErrUnkw, Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(getActivity(), R.string.eReviewErrTxt, Toast.LENGTH_LONG).show();
}
我试过将 push() 放在不同的位置,但仍然相同。 数据库结构如下所示 它应该在图像上创建这样的数据库结构
编辑: 数据库结构应该是这样的
enter code here
DB
└attr_reviews
└city1
└useruuid1
└comment: ""
└rating: x
└useruuid2
└....
└city2
└....
数据库中的数据正在被覆盖,您需要做的是使用push()
这会在数据库中为您创建一个随机ID:
db.child(uuid).push().setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() {
这样您将拥有以下数据库:
uuid
random-id1
comment: "comment"
rating: 1
random-id2
comment: "comment"
rating: 1
这样你就停在了“萨拉热窝”
DatabaseReference db = firebaseDatabase.getReferenceFromUrl("dburl").child("attr_reviews").child(placename);
//Sarajevo
// ==> PUSHING VALUES
db.setValue(uuid).addOnCompleteListener(new OnCompleteListener<Void>() { ...
我觉得你应该去嵌套。像
DatabaseReference db = firebaseDatabase.getReferenceFromUrl("dburl").child("attr_reviews").child(placename).child(userid);