Bonjour, je veux lire les données d'affichage de recyclerview et faire une comparaison.
Ceci ma mise en page pour l'activité: p>
Ce que je veux faire est de lire toutes les données de recyclerview et de comparer avec une suggestion de calories quotidienne. P>
Après avoir lu toutes les données, j'ai besoin de Faites des comparaisons sur le nombre de fois que l'utilisateur a pris au-dessus, moins ou suffisante de calories totales, comme indiqué dans l'analyse de «analyse des calories totales consommées des 7 derniers jours» p>
le code: p> Dois-je écrire un nouveau code pour résoudre ce problème ou autre? Toute aide sera très appréciée. Merci p> p>
3 Réponses :
Comme @MASOUDDARZI mentionné, il n'est pas lié au Vous pouvez essayer quelque chose comme ceci: p> recyclerview code>.
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
userHighlights = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
userHighlights.add(ds.getValue(HighightsModel.class));
requiredCalorieRef = FirebaseDatabase.getInstance().getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
requiredCalorieRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String userCalorieSuggestion = String.valueOf((dataSnapshot.child("daily calorie").getValue()));
int daily_calorie = Integer.parseInt(userCalorieSuggestion);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
HighlightsAdapter highlightsAdapter = new HighlightsAdapter(userHighlights);
highlightsRV.setAdapter(highlightsAdapter);
// do calculation here with userHighlights
int countExceeded = 0, countBelow = 0, countSufficient = 0;
for (HighightsModel h : userHighlights) {
if (h.totalCalorie > daily_calorie) {
countExceeded++;
} else if (h.totalCalorie < daily_calorie) {
countBelow++;
} else {
countSufficient++;
}
}
// update your TextView with the count numbers
// todo
}
}
Ainsi, la solution de force brute est d'avoir un pour vos données après avoir obtenu la moyenne des 7 jours.
for (your 7 days data){ // check if your data is lower or higher than the average // and store number of higher or lower }
J'ai résolu mon problème en ajoutant un autre enfant au nœud d'histoire. Pendant que, auparavant, je n'ai que celles-ci pour l'histoire:
Mais j'ajoute nouvel enfant appelé statut, le statut est mis à jour à partir de l'activité précédente. vu la photo ci-dessous: p>
Alors, ce que j'ai fait pour le code est: p>
private void upDateAnalysisAbove() { DatabaseReference ref = FirebaseDatabase.getInstance().getReference("History"); DatabaseReference mRef = ref.child(FirebaseAuth.getInstance().getCurrentUser().getUid()); Query mQuery = mRef.orderByChild("status").equalTo("ABOVE").limitToLast(7); mQuery.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String value = String.valueOf(dataSnapshot.getChildrenCount()); int values = Integer.parseInt(value); txt_above_output.setText(values + " times(s)"); upDateAnalysisLess(values); } @Override public void onCancelled(DatabaseError databaseError) { } }); } //LESS private void upDateAnalysisLess(int values) { DatabaseReference ref = FirebaseDatabase.getInstance().getReference("History"); DatabaseReference mRef = ref.child(FirebaseAuth.getInstance().getCurrentUser().getUid()); Query mQuery = mRef.orderByChild("status").equalTo("LESS").limitToFirst(7); mQuery.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String valueLess = String.valueOf(dataSnapshot.getChildrenCount()); int values_Less = Integer.parseInt(valueLess); if (values_Less == 0){ txt_less_output.setText(values_Less + " times(s)"); } if (values > values_Less){ int finalCount = values - values_Less ; txt_less_output.setText(finalCount + " times(s)"); } if (values <values_Less){ int finalCount = values_Less - values ; txt_less_output.setText(finalCount + " times(s)"); } updateSuff(); } @Override public void onCancelled(DatabaseError databaseError) { } }); } //SUFFICIENT private void updateSuff() { DatabaseReference ref = FirebaseDatabase.getInstance().getReference("History"); DatabaseReference mRef = ref.child(FirebaseAuth.getInstance().getCurrentUser().getUid()); Query mQuery = mRef.orderByChild("status").equalTo("SUFFICIENT").limitToFirst(7); mQuery.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String value = String.valueOf(dataSnapshot.getChildrenCount()); int suffValue = Integer.parseInt(value); if (suffValue == 0) { txt_sufficient_output.setText(suffValue + " times(s)"); } if (suffValue != 0){ txt_sufficient_output.setText(suffValue + " times(s)"); } } @Override public void onCancelled(DatabaseError databaseError) { } }); }
Je suppose que cela n'est pas lié à la vue Recycler! Vous devez ajouter une logique à vos données. Est-ce que je manque quelque chose dans votre question?
@ Masouddarzi: Oui, je pense que je dois récupérer à nouveau les données de certaines données. Mais je n'ai aucune idée comment puis-je compter les enfants. Par exemple, je dois compter le nombre de fois que l'utilisateur a pris plus de consommation de calories comparer à sa suggestion de calories quotidienne. Comme combien de fois.
Laissez-moi être clair, comme vous le montrerez sur la photo, vous souhaitez ajouter du domaine totalcalorie pour les 7 derniers jours?
@ Masouddarzi: Nope, qui a déjà été fait. Je dois faire une analyse basée sur les calories totales des 7 derniers jours.
Ainsi, après avoir obtenu les calories moyennes pour les 7 jours, vous souhaitez analyser les calories quotidiennes pour suggérer l'utilisateur plus élevé ou moins la moyenne ou non?
@Masouddarzi: oui exactement mais je n'ai aucune idée à le faire