Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 等待两个异步firebase ml vision方法结果在第三个方法中使用的最佳方法_Java_Android_Firebase_Asynchronous_Firebase Mlkit - Fatal编程技术网

Java 等待两个异步firebase ml vision方法结果在第三个方法中使用的最佳方法

Java 等待两个异步firebase ml vision方法结果在第三个方法中使用的最佳方法,java,android,firebase,asynchronous,firebase-mlkit,Java,Android,Firebase,Asynchronous,Firebase Mlkit,使用firebase ml vision识别图像中的二维码和/或文本时。等待异步文本和条形码检测器方法解析的最佳方法是什么,这样我就可以在第三种方法中利用它们的结果 我知道我可以从每个异步方法“onsuccess”侦听器调用一个替代方法来设置一个“hasReturned”变量,并且只有在两个方法都返回后才能继续,但我正在寻找正确的方法来实现这一点 private void firebaseRecognitionFromImage(FirebaseVisionImage image) {

使用firebase ml vision识别图像中的二维码和/或文本时。等待异步文本和条形码检测器方法解析的最佳方法是什么,这样我就可以在第三种方法中利用它们的结果

我知道我可以从每个异步方法“onsuccess”侦听器调用一个替代方法来设置一个“hasReturned”变量,并且只有在两个方法都返回后才能继续,但我正在寻找正确的方法来实现这一点

private void firebaseRecognitionFromImage(FirebaseVisionImage image) {

    //detect qr code
    FirebaseVisionBarcodeDetectorOptions options = new FirebaseVisionBarcodeDetectorOptions.Builder().setBarcodeFormats(FirebaseVisionBarcode.FORMAT_ALL_FORMATS).build();
    FirebaseVisionBarcodeDetector qrDetector = FirebaseVision.getInstance().getVisionBarcodeDetector(options);
    qrDetector.detectInImage(image).addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {
        @Override
        public void onSuccess(List<FirebaseVisionBarcode> barcodes) { /* RESULT 1 */ }
    });

    //detect text
    FirebaseVisionTextRecognizer textDetector = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
    textDetector.processImage(image).addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
        @Override
        public void onSuccess(FirebaseVisionText texts) { /* RESULT 2 */ }
    });

    //process qr code and text information or lack thereof
    thirdMedthod("RESULT 1", "RESULT 2");
}
private void firebaseRecognitionFromImage(FirebaseVisionImage图像){
//检测二维码
FirebaseVisionBarcodeDetectorOptions=新建FirebaseVisionBarcodeDetectorOptions.Builder().setBarcodeFormats(FirebaseVisionBarcode.FORMAT_ALL_FORMATS).build();
FirebaseVisionBarcodeDetector qrDetector=FirebaseVision.getInstance().getVisionBarcodeDetector(选项);
qrdeter.detectInImage(image.addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(列出条形码){/*结果1*/}
});
//检测文本
FireBaseVisionExtRecognizer textDetector=FirebaseVision.getInstance().GetOnDeviceExtRecognizer();
textDetector.processImage(image).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FirebaseVisionText文本){/*结果2*/}
});
//处理二维码和文本信息或缺少二维码和文本信息
第三种方法(“结果1”、“结果2”);
}

您应该使用的变体之一。它将创建一个新的任务对象,该对象在其他任务完成时完成

Task<List<FirebaseVisionBarcode>> t1 = qrDetector.detectInImage(image);
Task<FirebaseVisionText> t2 = textDetector.processImage(image);
Tasks.whenAll(t1, t2).addOnSuccessListener(new OnSuccessListener<Void>() {
    // check the results of t1 and t2
});
Task t1=qrDetector.detectInImage(图像);
任务t2=textDetector.processImage(图像);
Tasks.whenAll(t1,t2).addOnSuccessListener(新的OnSuccessListener()){
//检查t1和t2的结果
});
了解有关中的更多信息