Android Java получить средний рейтинг для каждого ресторана от Firebase - PullRequest
0 голосов
/ 13 апреля 2020

Я тысячи раз пытался получить значения для каждого ресторана, а затем получить среднее значение этих оценок для каждого из них. Вот моя база данных, где есть 3 пользователя, которые оценили рестораны: База данных Firebase Вот мой код Java:

private void displayRating () {mRatingBar.setVisibility (View.VISIBLE) ); mRatingBar.setOnRatingBarChangeListener (new RatingBar.OnRatingBarChangeListener () {@Override publi c void onRatingChanged (RatingBar ratingBar, рейтинг с плавающей запятой, логическое значение fromUser) {final DatabaseReference mRatingDb = Firebaseance namesIn (get). pos)). child ("rating"). child (currentUserId); mRatingDb.setValue (rating); финальная DatabaseReference averageRatingDb = FirebaseDatabase.getInstance (). getReference (). child (namesList.get (pos)). child (" Среднее ");

            mRatingDb.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {
                        double total = 0.0;
                        double count = 0.0;
                        double rating = ds.child(currentUserId).getValue(double.class);
                        total = total + rating;
                        count = count + 1;
                        double average = total / count;
                        averageRatingDb.setValue(average);
                    }
                }
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

        }

    });
}

По какой-то причине я чувствую, что моя функция l oop для onDataChange () вообще не работает. Я не могу получить ни один из рейтингов, поэтому могу вычислить среднее рейтинг.

Как я собираюсь получить значения от пользователей, а затем получить среднее значение для каждого ресторана отдельно?

Если кто-то может помочь, пожалуйста, я так растерялся. Спасибо .

1 Ответ

0 голосов
/ 14 апреля 2020

Вы можете попробовать вот так:

final DatabaseReference mRatingDb = FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child("rating").child(currentUserId);
final DatabaseReference mQueryDb = FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child("rating")
final DatabaseReference averageRatingDb = FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child("Average");
double total = 0.0;
double count = 0.0;
mRatingDb.setValue(rating).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
           mQueryDb.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    double rating = ds.getValue(double.class);
                    total = total + rating;
                    count = count + 1;
                    double average = total / count;
                    averageRatingDb.setValue(average);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

                }
              });

            }

          }); 
        }
    });
...