简体   繁体   English

试图从 Firebase 数据库中获取数据,但它总是得到 null 值

[英]Trying to get data from Firebase database but it always getting null values

I'm trying to get some kind of data from the database but it keeps giving me null value.我试图从数据库中获取某种数据,但它一直给我 null 值。

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) {

                    }
                });
            }
        });

I debugged my code and it showed me that the "amount" is null.我调试了我的代码,它告诉我“金额”是 null。 I included a picture of the debugging:我附上了调试的图片:

And here is the database tree:这是数据库树:

在此处输入图像描述

When you execute a query against the Firebase Database, there will potentially be multiple results.当您对 Firebase 数据库执行查询时,可能会有多个结果。 So the snapshot contains a list of those results.所以快照包含这些结果的列表。 Even if there is only a single result, the snapshot will contain a list of one result.即使只有一个结果,快照也会包含一个结果的列表。

That means your code needs to handle the list-aspect of the snapshot by looping over dataSnapshot.getChildren() :这意味着您的代码需要通过遍历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;
            ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM