Как получить данные из базы данных Firebase, используя условие множественного где в Android - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу получить данные из базы данных 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) {

    }
});

1 Ответ

0 голосов
/ 24 апреля 2019

В запросе, который вы используете, вы получаете только один счет, где свойство 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 передать несколько отдельных значений в запрос.Вам нужно будет выполнить отдельный запрос для каждого значения и объединить их на стороне клиента.

Пожалуйста, также проверьте ответ Фрэнка ван Пуффелена из следующего поста:

А для Firestore, пожалуйста, также проверьте мой ответ из этого поста:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...