Android Java从Firebase获得每家餐厅的平均评级

Android Java从Firebase获得每家餐厅的平均评级,java,android,firebase,average,rating,Java,Android,Firebase,Average,Rating,我尝试了数千次,从每家餐厅获得价值,然后从每家餐厅的评级中获得平均值。 这是我的firebase,其中有3位用户对餐厅进行了评级: 以下是我的Java代码: 私人信用评级(){ mRatingBar.setVisibility(View.VISIBLE); mRatingBar.setOnRatingBarChangeListener(新的RatingBar.OnRatingBarChangeListener(){ @凌驾 更改了公共无效率(率条率条、浮动率条、布尔值fromUser){ fin

我尝试了数千次,从每家餐厅获得价值,然后从每家餐厅的评级中获得平均值。 这是我的firebase,其中有3位用户对餐厅进行了评级: 以下是我的Java代码:

私人信用评级(){ mRatingBar.setVisibility(View.VISIBLE); mRatingBar.setOnRatingBarChangeListener(新的RatingBar.OnRatingBarChangeListener(){ @凌驾 更改了公共无效率(率条率条、浮动率条、布尔值fromUser){ final DatabaseReference mRatingDb=FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child(“rating”).child(currentUserId); mRatingDb.设定值(额定值); final DatabaseReference averageRatingDb=FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child(“平均”)

出于某种原因,我觉得onDataChange()上的For循环根本不起作用。我无法获得任何评分,因此我可以计算平均评分

我将如何从用户那里得到这些值,然后分别得到每个餐厅的平均值

如果有人能帮上忙,我真是迷路了。 谢谢。

您可以这样尝试:

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) {

                }
              });

            }

          }); 
        }
    });
final DatabaseReference mRatingDb=FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child(“rating”).child(currentUserId);
最终数据库引用mQueryDb=FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child(“评级”)
final DatabaseReference averageRatingDb=FirebaseDatabase.getInstance().getReference().child(namesList.get(pos)).child(“平均”);
双倍合计=0.0;
重复计数=0.0;
mRatingDb.setValue(rating).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
mQueryDb.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
双重评级=ds.getValue(双重等级);
总计=总计+额定值;
计数=计数+1;
双倍平均数=总数/计数;
averageRatingDb.setValue(平均值);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}); 
}
});

请不要发布代码、XML或日志的屏幕截图。请将所有文本作为文本发布。对于DataAES JSON,您可以通过单击溢出菜单中的“导出JSON”链接将其作为文本获取(⠇) 在你的网站上。我已经提供了文本代码,但是很混乱。非常感谢你,你是救命恩人!
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) {

                }
              });

            }

          }); 
        }
    });