here is model class :
I want that I get all food items from all categories one by one and than show every single food item data in recycler view
and after getting list of all items I want that I add only those items in a list which pin value is TRUE
public class Items {
String name, desc,image, category;
int price;
boolean pin;
public Items(String name, String desc, String image, String category, int price, boolean pin) {
this.name = name;
this.desc = desc;
this.image = image;
this.category = category;
this.price = price;
this.pin = pin;
}
public Items() {
}
public boolean isPin() {
return pin;
}
public void setPin(boolean pin) {
this.pin = pin;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
here is the java class file code : when I check snapshot using snapshot.getValue() in log it gives me all categories also items, but it is not adding in a list...why ???
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("admin");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.getClass();
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
Items items = dataSnapshot.getValue(Items.class);
list.add(items);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
this is my database :
CodePudding user response:
Your for (DataSnapshot dataSnapshot : snapshot.getChildren()){
loop only loops over one level in the database, so your dataSnapshot
points to BBQ
and then Chines
, not to the individual food items.
Since you want to loop over two nested node levels, you need two nested loops in your code:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("admin");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.getClass();
for (DataSnapshot categorySnapshot : snapshot.getChildren()){ //