Как извлечь данные из базы данных Firebase, передав переменную в reference.child ()? - PullRequest
0 голосов
/ 12 февраля 2019

Я создал приложение, которое сканирует QR-коды с помощью Google Vision API и передает значение QR в базу данных реального времени Firebase. Полученные данные отображаются в TextViews.Однако значения не извлекаются из Firebase, если переменная передается как дочерняя при обращении к базе данных.Как установить переменную как дочернюю при обращении к базе данных?

Примечание. С базой данных проблем не возникает, поскольку данные передаются при передаче строки как дочерней

Это приложение использует Google Vision API для сканирования QR-кодов. Все зависимости обновляются до последних версий, а также не отображаются исключения.

НЕ РАБОТАЕТ (когда переменная QRCODE передается как дочерняя) класс name =AnimalInfo

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_animal_information);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    animalClass = (TextView) findViewById(R.id.aniClass);
    animalFamily = (TextView) findViewById(R.id.aniFamily);
    animalOrder = (TextView) findViewById(R.id.aniOrder);

    Intent intent = getIntent();
    QRCODE = intent.getStringExtra(QrScanner.QR_CODE);

    DB = FirebaseDatabase.getInstance();
    ref = DB.getReference().child("Animals").child(**QRCODE**);
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String DBAnimalClass = dataSnapshot.child("class").getValue().toString();
            String DBAnimalFamily = dataSnapshot.child("family").getValue().toString();
            String DBAnimalOrder = dataSnapshot.child("order").getValue().toString();

            animalClass.setText(DBAnimalClass);
            animalFamily.setText(DBAnimalFamily);
            animalOrder.setText(DBAnimalOrder);

        }

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

        }
    });
}

РАБОТАЮЩАЯ (когда строка передается как дочерний элемент) имя класса = AnimalInfo

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_animal_information);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    animalClass = (TextView) findViewById(R.id.aniClass);
    animalFamily = (TextView) findViewById(R.id.aniFamily);
    animalOrder = (TextView) findViewById(R.id.aniOrder);

    Intent intent = getIntent();
    QRCODE = intent.getStringExtra(QrScanner.QR_CODE);

    DB = FirebaseDatabase.getInstance();
    ref = DB.getReference().child("Animals").child(**"00000001"**);
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String DBAnimalClass = dataSnapshot.child("class").getValue().toString();
            String DBAnimalFamily = dataSnapshot.child("family").getValue().toString();
            String DBAnimalOrder = dataSnapshot.child("order").getValue().toString();

            animalClass.setText(DBAnimalClass);
            animalFamily.setText(DBAnimalFamily);
            animalOrder.setText(DBAnimalOrder);

        }

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

        }
    });
}

QRScanner класс: получает QRзакодируйте и передайте его в класс AnimalInfo, используя намерение

@Override
        public void receiveDetections(Detector.Detections<Barcode> detections) {

            final SparseArray<Barcode> qrCodes = detections.getDetectedItems();

            if(qrCodes.size()>0)
            {
                qrResult.post(new Runnable() {
                    @Override
                    public void run() {

                        qrResult.setText(qrCodes.valueAt(0).displayValue);
                        Intent intent = new Intent(QrScanner.this,AnimalInformation.class);
                        intent.putExtra(QR_CODE,qrCodes.valueAt(0).displayValue);
                        startActivity(intent);
                    }
                });
            }
        }

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

Другая проблема: макет AnimalInfo создается несколько раз, когда он загружается при запуске намерения в QRScanner.java, и мне приходится несколько раз нажимать кнопку «Назад», чтобы перейти на домашнюю страницу.

...