【问题标题】:When scanning a QR code I want to check if the value exists in my database扫描二维码时,我想检查数据库中是否存在该值
【发布时间】:2022-02-15 21:11:58
【问题描述】:

我已经实现了一个二维码扫描器,当我扫描二维码时,我会得到一个AlertDialog。我想要的是当我扫描值为 2(示例)的 QR 码时,我希望应用程序检查该值是否存在于我的 Database 中。如果是这样,我想将我的AlertDialog 中的标题设置为我的Database 中的"toolname" 值。

实际上我以前也这样做过,但由于我是新手,所以我不记得我是怎么做到的。 希望有人可以帮助我。

这是我的结构:

这是我的二维码扫描器代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);


    IntentResult intentResult = IntentIntegrator.parseActivityResult(
            requestCode, resultCode, data
    );


    if (intentResult.getContents() != null) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

        builder.setMessage("Hello");

        builder.setTitle("Here I want the name of the item in my database");

        builder.show();

    }
}

这是我从 firebase 读取数据的方式:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mAuth = FirebaseAuth.getInstance();
    databaseUsers = FirebaseDatabase.getInstance("").getReference("Ansatte");
    databaseTools = FirebaseDatabase.getInstance(").getReference("Fellesverktøy");


    currentUser = mAuth.getCurrentUser().getUid();

    DatabaseReference hasUserStorageRef = databaseUsers.child(currentUser).child("hasusersstorage");

    userloggedin = findViewById(R.id.tv_userloggedin);
    bttoaddtool = findViewById(R.id.bt_addtool);
    bttoollist = findViewById(R.id.bt_toollist);
    btusertoollist = findViewById(R.id.bt_usertoollist);
    btlogoutuser = findViewById(R.id.bt_logoutuser);
    ivqrscan = findViewById(R.id.iv_qrscan);

    hasUserStorageRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (task.isSuccessful()) {
                DataSnapshot snapshot = task.getResult();
                if (snapshot.exists()) {
                    String hasusersstorage = snapshot.getValue(String.class);
                    if (hasusersstorage.equals("Nei")) {

                        bttoaddtool.setVisibility(View.GONE);
                        btusertoollist.setVisibility(View.GONE);
                    } else if (hasusersstorage.equals("Ja")) {
                        bttoaddtool.setVisibility(View.VISIBLE);
                        btusertoollist.setVisibility(View.VISIBLE);
                    }
                }
            } else {
                Log.d("TAG", task.getException().getMessage());
            }
        }
    });

更新代码:

 @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);

    Query query = databaseTools;

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

            builder.setTitle(intentResult.getContents());

            String toolid = snapshot.getValue().toString();

            builder.setMessage(toolid);


            builder.show();

        }

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

        }
    });
}

}

【问题讨论】:

  • 您的代码中没有任何内容与您如何从实时数据库中读取数据相关。可以向我们展示您的尝试吗?
  • 嗨,我从那个“活动”中添加了更多代码。我可以向您展示我一直在尝试的示例。
  • 有人打电话给.child(currentUser),但我们在您的屏幕截图中看不到它。凸轮,请您添加更详细的?
  • 那是因为那是一个不同的数据库,它是给"Ansatte的。但是对于 QR 扫描仪,它是我使用的 Fellesverktøy 的数据库。我将在原帖中添加更多细节。
  • 我添加了更多信息,我真正想在AlertDialog 中显示的是与我扫描的条形码具有相同ID 的工具名称。

标签: java android firebase firebase-realtime-database google-cloud-platform


【解决方案1】:

要在搜索 Firebase 数据库时获取 toolname 字段的值,请使用以下代码行:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference productsRef = db.child("Fellesverktøy").orderByChild("toolQRid").equalTo("2");
    productsRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            for (DataSnapshot ds : task.getResult().getChildren()) {
                String toolName = ds.child("toolname").getValue(String.class);
                Log.d("TAG", toolName);
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});

logcat 中的结果将是:

heipadeg

现在,您可以获取此值并将其作为标题添加到您的 AlertDialog。

【讨论】:

  • 这段代码有效,所以我会设法使其余的工作。感谢您花时间回答。
猜你喜欢
  • 1970-01-01
  • 2015-07-11
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多