使用从 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(因此您必须知道活动类型)
我想使用存储在 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(因此您必须知道活动类型)