首页 > 解决方案 > 通过使用 android 应用扫描结果 id 检查产品 id(子 id)从 FirebaseRealtime-database 完全获取行数据

问题描述

我的应用带有条形码扫描仪,并且我为该应用创建了 Firebase 实时数据库。我在数据库中输入了一些数据。我想通过检查扫描结果到数据库中的 id(在特定行中)来连续获取所有数据(名称、详细信息、价格)。找到了一些类似于查询的教程,但我无法按照我的意愿设置代码。拜托,有人帮我做这个小修正吗?

下面我提到了我目前的工作代码。但它正在使用行唯一ID检查扫描结果并按照我想要的方式获取。但是很难输入与扫描结果相同的UID的数据。仅当我将数据直接动态添加到站点中的数据库时,此代码才有效。

第一张图片是工作当前代码:

在此处输入图像描述

secong pic 将通过检查其 id 来获取:

在此处输入图像描述

@Override
public void handleResult(Result result) {
    final String scanResult = result.getText().toString();
    setContentView(R.layout.activity_second);


    databasefetch = FirebaseDatabase.getInstance().getReference().child("save").child(scanResult);
    databasefetch.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            TextView text = (TextView) findViewById(R.id.textView3);
            String name = dataSnapshot.child("name").getValue().toString();
            String details = dataSnapshot.child("details").getValue().toString();
            String price = dataSnapshot.child("price").getValue().toString();

            text.setText("\nProduct Name : "+name+"\nDetails : "+details+"\nPrice : "+price);

            //text to speech
            String  toSpeak=text.getText().toString();
            //Toast.makeText(getApplicationContext(),toSpeak,Toast.LENGTH_SHORT).show();
            txt.speak(toSpeak,TextToSpeech.QUEUE_FLUSH,null);


        }

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

        }
    });

标签: javaandroidfirebase-realtime-database

解决方案


要根据其id属性从第二个 JSON 片段中获取数据,您需要运行一个查询:

databasefetch = FirebaseDatabase.getInstance().getReference().child("save");
Query query = databasefetch.orderByChild("id").equalTo(8901058862836L);
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
        TextView text = (TextView) findViewById(R.id.textView3);
        String name = snapshot.child("name").getValue(String.class);
        String details = snapshot.child("details").getValue(String.class);
        String price = snapshot.child("price").getValue(String.class);

        ...
      }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
})

推荐阅读