Создайте диаграмму P ie, используя данные, извлеченные из Firebase Firestore в Java - PullRequest
0 голосов
/ 10 июля 2020

Я хочу создать диаграмму ap ie, используя данные, хранящиеся в Firebase Firestore. В настоящее время я использую библиотеку MPAndroidChart, которая у меня есть, работая с stati c 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"));

p ie chart stati c пример данных

enter image description here

I want my pie chart to display the total hours/mins completed per activity type (as per image).

My data is organised like this.

введите описание изображения здесь

До сих пор мне удалось извлечь общее общее количество часов, используя следующий код, и журнал показывает ожидаемый ответ.

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));
            }
        }
    });

Есть ли способ запросить данные для каждого типа деятельности и вычислить общую сумму для каждого типа, а затем добавить эту информацию в список ArrayList?

1 Ответ

1 голос
/ 10 июля 2020

Если вы знаете название действий, вы можете использовать запрос 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 для каждого ActivityType (так необходимо знать вид деятельности)

...