[英]How to insert the star rating into firebase
我有以下代码,如果我先将星级设置为隐藏,然后让用户在他们给出评论后对星级进行评分,我才能使其合乎逻辑地工作。 我不确定它是如何工作的,但只有当用户点击星星时,星星的评级才会插入到数据库中。 我试图将它放在我的按钮的 setOnClickListener 下,以便评分应该与评论一起发送,但它不起作用。 我必须在我的按钮外执行此操作....
add_review_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final DatabaseReference reference = FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference();
reference.addValueEventListener(new ValueEventListener() {
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot childSnapshot : snapshot.getChildren()) {
String clinic_info = String.valueOf(childSnapshot.child("Name").getValue());
final String txt_review = review.getText().toString().trim();
String txt_dorevitch = dorevitch.getText().toString().trim();
String txt_skin_cancer = skin_cancer_check.getText().toString().trim();
String txt_ear_suctioning = ear_suctioning.getText().toString().trim();
String user_email = user.getText().toString().trim();
String user_email2 = Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getEmail();
String other = others.getText().toString().trim();
String input = input_others.getText().toString().trim();
// replace(":" ,"");
// message[0] = message[0].replaceAll("[0-9]" ,"");
// message[0] = message[0].replace("Shop" ,"");
// if (clinic_info.equals(message[0]) && !user_email.isEmpty() && user_email.equals(user_email2) && !txt_review.isEmpty()) {
user_email = user_email.split("\\s*@\\s*")[0];
final HashMap<String, Object> map = new HashMap<>();
map.put("Review by " + user_email, txt_review);
FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference().child(message[0]).child("Reviews").updateChildren(map);
// rating bar code
ratingbar.setVisibility(View.VISIBLE);
final String finalUser_email = user_email;
ratingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
int rate = (int) rating;
String info = null;
myRating = (int) ratingBar.getRating();
switch (rate) {
case 1:
info = "Sorry to hear that! :( ";
break;
case 2:
info = "We always accept suggestions!";
break;
case 3:
info = "Good enough!";
break;
case 4:
info = "Great! Thanks you!";
break;
case 5:
info = "Awesome! You are the best!";
break;
}
Toast.makeText(Add_Review.this, info, Toast.LENGTH_SHORT).show();
HashMap<String, Object> map5 = new HashMap<>();
map5.put("Rating by " + finalUser_email, rate);
Toast.makeText(Add_Review.this, "Review Successfully Submited", Toast.LENGTH_SHORT).show();
FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference().child(message[0]).child("Rating").updateChildren(map5);
}
});
我认为只有当用户单击星星时才保存您的评分的原因是因为 updateChildren 代码位于 onRatingChangeListener 中。
如果您将 updateChildren 命令保留在 onRatingChangeListener 之外和 onClickListener 审核按钮内,是否不起作用?
也试试这个:
将 onRatingChangeListener 保留在评论按钮之外;s OnclickListener。
将info
变量声明为 public 以便它可以在两个函数中使用,即 OnRatingChangeListener (它将在info
变量中保存评级),然后是按钮的 OnclickListener (它将使用info
变量将评级保存到数据库中)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.