我想通过评分来计算每道菜的平均值,并显示在条形图中,因此我需要使用每道菜的评分值。
示例3中,每个用户在用户特定的节点linkToJSONTree中对牛奶的评价为{4,5,3}
我需要一个ArrayList
,它可以在其自身列表的每个索引中存储多个列表:
private void letMeCalculate()
{
databaseReference = FirebaseDatabase.getInstance().getReference("/Feedback/"+mdate+"/"+mealtime+"/");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot i : dataSnapshot.getChildren())
{
stringArrayList.add(i.getKey());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
for (String s : stringArrayList)
{
databaseReference = FirebaseDatabase.getInstance().getReference("/Feedback/"+mdate+"/"+mealtime+"/"+s+"/");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren())
{
NewDishRating newDishRating = dataSnapshot1.getValue(NewDishRating.class);
newDishRatingList.add(newDishRating);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}// end of for loop
}// end of function
答案 0 :(得分:1)
在回调之外使用stringArrayList
时,由于onDataChange()
方法的异步行为,它将始终为空。如果要使用stringArrayList
,则应仅在回调内部使用它。因此,要解决此问题,请在第一个for循环结束后,在onDataChange()
方法内移动第二个for循环。
如果您需要在回调之外使用该列表,建议您从此 post 中查看anwser的最后一部分,其中我已经说明了如何使用自定义回调。您也可以查看此 video 以获得更好的理解。
答案 1 :(得分:-1)
我得到了解决方案,而不是使用Array List的Array list,我可以按照此链接创建genericTypeIndicator