如何通过将变量传递给reference.child()从Firebase数据库检索数据?

时间:2019-02-12 19:02:20

标签: java android firebase firebase-realtime-database google-vision

我创建了一个应用程序,该应用程序使用Google Vision API扫描QR码并将QR值传递到Firebase实时数据库。检索到的数据显示在TextViews内部。但是,如果在引用数据库时将变量作为子级传递,则不会从Firebase检索值。在引用数据库时如何将变量设置为子级?

注意:数据库没有问题,因为在将字符串作为子代传递时会检索数据

此应用程序使用google Vision API扫描QR码。所有依赖项均已更新为最新版本,并且也不会显示任何异常。

不工作(当作为孩子传递变量QRCODE时)类名称= 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码值作为数据库的引用传递给它,以便它根据数据而不是对引用进行硬编码。

另一个问题:在启动QRScanner.java中的意图时,加载AnimalInfo布局时会多次创建它,并且我必须多次按返回按钮才能进入主页。

0 个答案:

没有答案