Android 如何从RecyclerView读取数据并进行比较?

Android 如何从RecyclerView读取数据并进行比较?,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,嗨,我想从RecyclerView读取显示数据并进行比较 这是我的活动布局: 我想做的是从RecyclerView中读取所有数据,并与每日卡路里建议进行比较 阅读完所有数据后,我需要对用户摄入上述总热量的次数进行比较,如“过去7天消耗的总热量分析”所示 守则: @覆盖 受保护的void onStart(){ Query Query=ref.orderByChild(“时间戳”).limitToLast(7).endAt(日期); super.onStart(); if(查询!=null){

嗨,我想从RecyclerView读取显示数据并进行比较

这是我的活动布局:

我想做的是从RecyclerView中读取所有数据,并与每日卡路里建议进行比较

阅读完所有数据后,我需要对用户摄入上述总热量的次数进行比较,如“过去7天消耗的总热量分析”所示

守则:

@覆盖
受保护的void onStart(){
Query Query=ref.orderByChild(“时间戳”).limitToLast(7).endAt(日期);
super.onStart();
if(查询!=null){
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
userHighlights=newarraylist();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
添加(ds.getValue(highlightsmodel.class));
RequiredCarrieRef=FirebaseDatabase.getInstance().getReference(“用户”).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
RequiredCarrieRef.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
String usercaloriessuggestion=String.valueOf((dataSnapshot.child(“每日卡路里”).getValue());
int daily_carorie=Integer.parseInt(用户卡路里建议);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
HighlightsAdapter HighlightsAdapter=新的HighlightsAdapter(userHighlights);
highlightsRV.setAdapter(highlightsAdapter);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Toast.makeText(UserNewHighlights.this,databaseError.getMessage(),
吐司。长度(短)。show();
}
});
}
}
这是我的火力基地:


我必须写一个新的代码来解决这个问题吗?任何帮助都将不胜感激。谢谢

正如@MasoudDarzi提到的,它与
回收视图
无关

您可以尝试以下方法:

@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
    }
}
@覆盖
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
userHighlights=newarraylist();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
添加(ds.getValue(highlightsmodel.class));
RequiredCarrieRef=FirebaseDatabase.getInstance().getReference(“用户”).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
RequiredCarrieRef.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
String usercaloriessuggestion=String.valueOf((dataSnapshot.child(“每日卡路里”).getValue());
int daily_carorie=Integer.parseInt(用户卡路里建议);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
HighlightsAdapter HighlightsAdapter=新的HighlightsAdapter(userHighlights);
highlightsRV.setAdapter(highlightsAdapter);
//在这里使用userHighlights进行计算
int countextended=0,countbelower=0,countfulfough=0;
对于(HighlightsModel h:userHighlights){
如果(总热量>每日热量){
counter++;
}否则如果(h.总热量<每日热量){
countdown++;
}否则{
countfull++;
}
}
//使用计数更新您的TextView
//待办事项
}
}

所以暴力解决方案是在获得7天平均值后,在数据中添加for

for (your 7 days data){
 // check if your data is lower or higher than the average
// and store number of higher or lower
}

寻找更好的解决方案?

我通过在历史节点添加另一个子节点解决了问题。在此之前,我对历史只有以下几点:

但我添加了一个新的子项,称为STATUS,该状态是从以前的活动中更新的,如下图所示:

因此,我对代码所做的是:

    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) {

            }
        });

    }
private void upDateAnalysisAbove(){
DatabaseReference ref=FirebaseDatabase.getInstance().getReference(“历史”);
DatabaseReference mRef=ref.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
查询mQuery=mRef.orderByChild(“状态”).equalTo(“以上”).limitToLast(7);
mQuery.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
String value=String.valueOf(dataSnapshot.getChildrenCount());
int values=Integer.parseInt(值);
txt_高于_output.setText(值+次数);
无更新分析(值);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
//少
私有void upDateAnalysisLess(int值){
DatabaseReference ref=FirebaseDatabase.getInstance().getReference(“历史”);
DatabaseReference mRef=ref.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
查询mQuery=m