使用从 Java 中的 Firebase Firestore 提取的数据创建饼图

Create Pie Chart using data extracted from Firebase Firestore in Java

我想使用存储在 Firebase Firestore 中的数据创建饼图。我目前正在使用 MPAndroidChart 库,我已经使用静态 ArrayList。

 ArrayList<PieEntry> hours = new ArrayList<>();

    hours.add(new PieEntry(2, "Professional"));
    hours.add(new PieEntry(1, "Self-Directed"));
    hours.add(new PieEntry(5, "Work-Based Learning"));
    hours.add(new PieEntry(2, "Other"));

饼图静态数据示例

我希望我的饼图显示每个 activity 类型(根据图像)完成的总数 hours/mins。

我的数据是这样组织的。

到目前为止,我已经能够使用以下代码提取总时数,并且日志显示了预期的答案。

CollectionReference cpdHours = fStore.collection("cpdActivities")
            .document(user.getUid())
            .collection("myCPD");

    cpdHours.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()){
                  float totalHours = 0;
                for (QueryDocumentSnapshot document : task.getResult()){
                    String sHour = document.getString("Activity_Hours");
                    float xHours = Float.parseFloat(sHour);
                    totalHours += xHours;
                }
                Log.d("TAG", String.valueOf(totalHours));
            }
        }
    });

有没有办法查询每个不同 activity 类型的数据并计算每个类型的总数,然后将此信息添加到 ArrayList?

如果您知道活动的名称,可以使用查询 https://firebase.google.com/docs/firestore/query-data/queries#simple_queries

CollectionReference cpdHoursSelfDirectedLearning = fStore.collection("cpdActivities")
            .document(user.getUid())
            .collection("myCPD");
            .whereEqualTo("Activity_Hours", "Self-Directed Learning")

private float calcTime(List<QueryDocumentSnapshot> documents){
   float totalHours = 0.0;
   for (QueryDocumentSnapshot document : task.getResult()){
     String sHour = document.getString("Activity_Hours");
     float xHours = Float.parseFloat(sHour);
     totalHours += xHours;
   }
   return totalHours
}
cpdHoursSelfDirectedLearning.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()){
               hours.add(
                 new PieEntry(calcTime(task.getResult()), "Self-Directed Learning")
               );
            }
         }
})

您必须为每个活动类型创建一个 CollectionReference(因此您必须知道活动类型)