java - 如何在Android中使用多个where条件从Firebase数据库中获取数据

标签 java android firebase firebase-realtime-database

我想使用多个 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/

相关文章:

org.apache.naming.resources.DirContextURLConnection.getInputStream 处的 java.io.FileNotFoundException

java - 如何从 hibernate 中的实体类的结果中获取数据

java - Android 默认视频播放器在视频播放完毕后关闭

javascript - 如何通过 Google 身份验证在 Firebase Firestore 数据库中创建记录

javascript - 如何在 Firebase 托管和函数中配置重写和映射前缀动态路由路径?

java - 从服务访问 View

java - 我可以从 session 属性中获取属性,但不能从 session 映射中获取属性

渲染时 Android 数据绑定(bind)滞后

android - 如何在 Android Object Animator 上获取随机数

android - FCM 控制台推送有效,但服务器推送无效