Получение значения Firebase возвращает значение NULL - PullRequest
2 голосов
/ 25 марта 2020

Итак, у меня есть база данных в этом формате: enter image description here

Мне нужно иметь возможность получить name, price и quantity после поиска в база данных для штрих-кода.

Я пробовал что-то вроде этого:

    mFirebaseInstance = FirebaseDatabase.getInstance();
    mFirebaseDatabase = mFirebaseInstance.getReference("ProductData");
    UserId = mFirebaseDatabase.push().getKey();

public void searchProduct(String barcode){
    mFirebaseDatabase.child("Products").child("barcode").equalTo(barcode).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Log.d("DBVAL", String.valueOf(dataSnapshot.getValue()));
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Вот вывод:

D / DBVAL: null

1 Ответ

2 голосов
/ 25 марта 2020

Вы получаете этот результат, потому что вы не используете правильный запрос. Кроме того, в вашей базе данных нет узла с именем DataUsers. Чтобы получить все дочерние элементы, которые содержат определенный штрих-код, используйте следующий запрос:

Query barcodeQuery = mFirebaseDatabase.child("ProductData").child("Products")
        .orderByChild("barcode").equalTo(barcode);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            int price = ds.child("price").getValue(Integer.class);
            int quantity = ds.child("quantity").getValue(Integer.class);
            Log.d("TAG", name + "/" + price + "/" + quantity);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
barcodeQuery.addValueEventListener(valueEventListener);

Смотрите, я добавил в этот запрос оба узла ProductData и Products, а затем я упорядочил все дочерние элементы по barcode имущество и б / у .equalTo(barcode).

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