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

Я пытаюсь получить какие-то данные из базы данных, но они продолжают давать мне нулевое значение.

verifyPromo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String promoCodeString = promoCode.getEditText().getText().toString();
                Query query = FirebaseDatabase.getInstance().getReference().child("promoCodes").orderByChild("promoCode").equalTo(promoCodeString);
                query.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists() & promoUnapplied) {
                            Map<String, String> promoCodeInfo = (Map<String, String>) dataSnapshot.getValue();
                            String amount = promoCodeInfo.get("amount");
                            double bill = Double.valueOf(theBillTA.getText().toString());
                            double billAfterDis = bill * Double.valueOf(amount) / 100;
                            bill -= billAfterDis;
                            theBillTA.setText(String.valueOf(bill));
                            promoUnapplied = false;
                            Toast.makeText(NewAppointmentTA.this, "Grate,You Got A Discount", Toast.LENGTH_SHORT).show();
                        } else if (dataSnapshot.exists() & !promoUnapplied) {
                            Toast.makeText(NewAppointmentTA.this, "You Already Get A Discount", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(NewAppointmentTA.this, "The Promo Code you Entered Is Not Exist", Toast.LENGTH_SHORT).show();
                        }
                    }
                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
        });

Я отладил свой код, и он показал, что «сумма» равна нулю. Я включил картинку отладки:

А вот дерево базы данных:

enter image description here

1 Ответ

0 голосов
/ 07 октября 2019

Когда вы выполняете запрос к базе данных Firebase, потенциально может быть несколько результатов. Таким образом, снимок содержит список этих результатов. Даже если есть только один результат, снимок будет содержать список из одного результата.

Это означает, что ваш код должен обрабатывать аспект снимка со списком, выполняя цикл по dataSnapshot.getChildren():

Query query = FirebaseDatabase.getInstance().getReference().child("promoCodes").orderByChild("promoCode").equalTo(promoCodeString);
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      if (promoUnapplied) {
        for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
            String amount = snapshot.child("amount").getValue(String.class);
            double bill = Double.valueOf(theBillTA.getText().toString());
            double billAfterDis = bill * Double.valueOf(amount) / 100;
            bill -= billAfterDis;
            ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...