Android中的数组列表数组以获取对象的Firebase对象

时间:2018-11-25 09:04:09

标签: java android firebase firebase-realtime-database

我想通过评分来计算每道菜的平均值,并显示在条形图中,因此我需要使用每道菜的评分值。

示例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

2 个答案:

答案 0 :(得分:1)

在回调之外使用stringArrayList时,由于onDataChange()方法的异步行为,它将始终为空。如果要使用stringArrayList,则应仅在回调内部使用它。因此,要解决此问题,请在第一个for循环结束后,在onDataChange()方法内移动第二个for循环。

如果您需要在回调之外使用该列表,建议您从此 post 中查看anwser的最后一部分,其中我已经说明了如何使用自定义回调。您也可以查看此 video 以获得更好的理解。

答案 1 :(得分:-1)

我得到了解决方案,而不是使用Array List的Array list,我可以按照此链接创建genericTypeIndicator

https://stackoverflow.com/a/41503903/5867698