我想使用多个 where 条件从 Firebase 实时数据库中获取数据。
databaseReference = FirebaseDatabase.getInstance().getReference("tblSalesDetails");
Query query = databaseReference.child("authenticationId").child("9591290928").orderByChild("invoiceNo").equalTo(str_invoice_no);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int i=0;
for(DataSnapshot snap : dataSnapshot.getChildren()) {
Log.d("tag","item ID:");
TableRow tr = new TableRow(AddItemToSale.this);
CheckBox Box = new CheckBox(AddItemToSale.this);
tr.setLayoutParams(getLayoutParams());
Log.d("tag","item ID:"+snap.child("itemId").getValue(String.class));
tr.addView(getTextView("0", String.valueOf(i + 1), ContextCompat.getColor(AddItemToSale.this, R.color.colorPrimary), Typeface.NORMAL, R.drawable.high));
tr.addView(getTextView((snap.child("sdId").getValue(String.class)),snap.child("itemId").getValue(String.class), ContextCompat.getColor(AddItemToSale.this, R.color.colorPrimary), Typeface.NORMAL,R.drawable.high));
tr.addView(getTextView((snap.child("sdId").getValue(String.class)),snap.child("amount").getValue(String.class), ContextCompat.getColor(AddItemToSale.this, R.color.colorPrimary), Typeface.NORMAL,R.drawable.high));
tr.addView(getTextView((snap.child("sdId").getValue(String.class)),snap.child("discAmount").getValue(String.class), ContextCompat.getColor(AddItemToSale.this, R.color.colorPrimary), Typeface.NORMAL, R.drawable.high));
tr.addView(getTextView((snap.child("sdId").getValue(String.class)),snap.child("taxName").getValue(String.class), ContextCompat.getColor(AddItemToSale.this, R.color.colorPrimary), Typeface.NORMAL, R.drawable.high));
tbl_sales.addView(tr, getTblLayoutParams());
i++;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
最佳答案
您使用的查询仅获取一张发票,其中 invoiceNo
属性等于 str_invoice_no
。您无法在 Firebase 实时数据库中使用多个“WHERE”子句。您可以根据 Firebase 实时数据库中的多个值过滤属性的唯一解决方案是这些发票编号在某个范围内。例如,您可以使用以下查询获取与某些发票号码匹配的所有发票:
databaseReference = FirebaseDatabase.getInstance().getReference("tblSalesDetails");
Query query = databaseReference.child("authenticationId").child("9591290928")
.orderByChild("invoiceNo")
.startAt("startInvoiceNo")
.endAt("endInvoiceNo");
请注意,Firebase 实时数据库和新的 Cloud Firestore 中都没有办法数据库将多个单独的值传递到查询中。您必须对每个值执行单独的查询并在客户端合并它们。
另请查看 Frank van Puffelen 在以下帖子中的回答:
对于 Firestore,还请查看我在这篇文章中的回答:
关于java - 如何在Android中使用多个where条件从Firebase数据库中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824582/