Prasath:
digite descrição da imagem aqui
Eu criei uma aplicação android nesta aplicação, eu quero contar o valor criança único.
Eu criei loop for dentro da referência de banco de dados e variável global de atribuição, mas a coisa é que eu não sei quantos valores únicos ficará ao meu cálculo (quantas variáveis).
dbcloud.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
{
Modelfortotalsoldcount mc=dataSnapshot1.getValue(Modelfortotalsoldcount.class);
String name=mc.getFoodname();
String qty=mc.getFoodqty();
String price=mc.getFoodprice();
int totalcount=0;
if(fname.equals(name))
{
String fgname=name;
String fgprice=price;
Integer intqty=Integer.valueOf(qty);
totalcount=totalcount+intqty;
String totalval=String.valueOf(totalcount);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Alex Mamo:
Assumindo que todos os objetos são filhos diretos de sua raiz Firebase, para resolver isso, use a seguinte consulta:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.orderByChild("foodname").equalTo("Burger");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int count = 0;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String foodqty = ds.child("foodqty").getValue(String.class);
count = count + Integer.valueOf(foodqty);
}
Log.d(TAG, "count:" + count);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
query.addListenerForSingleValueEvent(valueEventListener);
O resultado na logcat será:
count: 4
Editar:
Se você não sabe o nome de comida, então você deve usar uma variável em vez disso:
Query query = rootRef.orderByChild("foodname").equalTo(foodName);
Em que o foodName é o que o usuário digita em um EditText
, por exemplo:
String foodName = foodNameEditText.getText().toString();