【问题标题】:Java map.putString not working within listenerJava map.putString 在侦听器中不起作用
【发布时间】:2022-10-17 14:51:05
【问题描述】:

我正在开发一个从图像中读取二维码的 Java 程序。我有以下代码:

@Override
    public Object callback(ImageProxy imageProxy, Object[] params) {
        WritableNativeMap writableNativeMap = new WritableNativeMap();

        BarcodeScannerOptions options =
                new BarcodeScannerOptions.Builder()
                        .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
                        .build();

        Image mediaImage = imageProxy.getImage();

        final List<Barcode>[] barcodesList = new List[]{Collections.<Barcode>emptyList()};

        if (mediaImage != null) {
            InputImage image =
                    InputImage.fromMediaImage(mediaImage, imageProxy.getImageInfo().getRotationDegrees());

            BarcodeScanner scanner = BarcodeScanning.getClient(options);

            Task < List < Barcode >> result = scanner.process(image);

            result.addOnSuccessListener(new OnSuccessListener < List < Barcode >> () {
                @Override
                public void onSuccess(List < Barcode > barcodes) {
                    for (Barcode barcode: barcodes) {
                        int valueType = barcode.getValueType();

                        switch (valueType) {
                            case Barcode.TYPE_TEXT:
                                // TODO
                            case Barcode.TYPE_URL:
                                Log.d(TAG, barcode.getUrl().getUrl());
                                writableNativeMap.putString("URL", barcode.getUrl().getUrl());
                                // TODO
                                break;
                        }
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    // ...
                }
            })
            .addOnCompleteListener(results -> imageProxy.close());
        }

        return writableNativeMap;
    }

当我调用这个函数时,它会返回{}。即使它到达Barcode.TYPE_URL 案例中的Log.d 语句。所以我知道它把东西放在 writableNativeMap 中。当我在 return 语句之前执行 .putString 时,它就可以工作了。有人可以帮我弄这个吗?

【问题讨论】:

    标签: java android react-native google-mlkit


    【解决方案1】:

    #process 是一个异步调用,因此可以在方法返回后调用 #onSuccess 回调。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 2013-12-16
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多