Android 如何从RecyclerView读取数据并进行比较?
嗨,我想从RecyclerView读取显示数据并进行比较 这是我的活动布局: 我想做的是从RecyclerView中读取所有数据,并与每日卡路里建议进行比较 阅读完所有数据后,我需要对用户摄入上述总热量的次数进行比较,如“过去7天消耗的总热量分析”所示 守则: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){
@覆盖
受保护的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