You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将条码扫描结果作为Firestore文档ID查询对应文档

问题解决方法

核心问题原因

你提前在全局初始化DocumentReference的逻辑错误:类加载时documentId还未赋值,默认是null,你创建的noteRef实际指向ID为"null"的不存在文档,自然查询不到结果。

修改步骤

  1. 清理无用全局变量,删掉错误的全局noteRef定义、Result类型的result和documentId变量,不需要提前存储这些值。
  2. 条码扫描结果是异步返回的,必须在onDecoded回调拿到扫描值后,动态创建对应文档的引用再执行查询。
  3. 注意CodeScanner的解码回调默认运行在子线程,更新UI需要切到主线程。

完整可运行修改代码示例

全局变量部分

// Initialise
private TextView textViewData;
private CodeScanner mCodeScanner;
private Button btClear;
private final FirebaseFirestore db = FirebaseFirestore.getInstance();
// 自行补全你的字段常量
private static final String KEY_BRAND = "Brand";
private static final String KEY_PRODUCT = "Product";
private static final String KEY_OWNED = "Owned";
private static final String KEY_MADE = "Made";
private static final String KEY_INGREDIENTS = "Ingredients";
private static final String KEY_INFO = "Info";

扫描回调逻辑部分

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 初始化控件
    btClear = findViewById(R.id.bt_clear);
    textViewData = findViewById(R.id.text_view_data);
    CodeScannerView scannerView = findViewById(R.id.scanner_view);
    mCodeScanner = new CodeScanner(this, scannerView);

    mCodeScanner.setDecodeCallback(new DecodeCallback() {
        @Override
        public void onDecoded(final Result result) {
            // 切换到主线程操作UI
            runOnUiThread(() -> {
                // 获取扫描得到的条码值
                String scanBarcode = result.getText();
                // 动态创建对应文档的引用
                DocumentReference noteRef = db.collection("Ratings").document(scanBarcode);
                // 执行查询
                noteRef.get()
                    .addOnSuccessListener(documentSnapshot -> {
                        if (documentSnapshot.exists()) {
                            String Brand = documentSnapshot.getString(KEY_BRAND);
                            String Product = documentSnapshot.getString(KEY_PRODUCT);
                            String Owned = documentSnapshot.getString(KEY_OWNED);
                            String Made = documentSnapshot.getString(KEY_MADE);
                            String Ingredients = documentSnapshot.getString(KEY_INGREDIENTS);
                            String Info = documentSnapshot.getString(KEY_INFO);
                            // 此处补充你自己的UI渲染逻辑
                        } else {
                            textViewData.setText("未查询到该条码对应的记录");
                        }
                    })
                    .addOnFailureListener(e -> {
                        textViewData.setText("查询失败:" + e.getMessage());
                    });
            });
        }
    });
    
    // 补充你原来的扫描启动逻辑、清除按钮逻辑等
}

额外优化建议

  • 可以加条码格式校验,避免扫描到非商品条码的无效值发起无效查询
  • 加查询loading提示,提升用户体验

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:48:01