我创建了一个应用程序,该应用程序使用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布局时会多次创建它,并且我必须多次按返回按钮才能进入主页。