Я создал приложение, которое сканирует 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, и мне приходится несколько раз нажимать кнопку «Назад», чтобы перейти на домашнюю страницу.