0
votes

Comment lire des données de RecyclERView et de comparaison?

Bonjour, je veux lire les données d'affichage de recyclerview et faire une comparaison.

Ceci ma mise en page pour l'activité:

 A B

Ce que je veux faire est de lire toutes les données de recyclerview et de comparer avec une suggestion de calories quotidienne.

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»

le code: xxx

Ceci est mon Firebase: Entrez la description de l'image ici

Dois-je écrire un nouveau code pour résoudre ce problème ou autre? Toute aide sera très appréciée. Merci


6 commentaires

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


3 Réponses :


1
votes

Comme @MASOUDDARZI mentionné, il n'est pas lié au recyclerview code>.

Vous pouvez essayer quelque chose comme ceci: p>

@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
    }
}


0 commentaires

0
votes

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
}


0 commentaires

0
votes

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:

 enfants précédents - Firebase P>

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>

 Enfants actuels - Firebase 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) {

            }
        });

    }


0 commentaires