如何在单独的 UI-Activity 中检索 Firebase 任务结果

How to retrieve Firebase Task Results in a separate UI-Activity

我目前正在试验使用 ML Kit 和本地 Firebase 框架来检测和分析人脸。
我有一个画廊 activity,用户可以在其中选择一张图片,然后被定向到另一个 activity,其中显示所选图片并分析人脸(我将代码简化以便问题更清楚):

private void classifyFaces(final Bitmap bitmap){

    FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);


    Task<List<FirebaseVisionFace>> result =
            detector.detectInImage(image)
                    .addOnSuccessListener(
                            new OnSuccessListener<List<FirebaseVisionFace>>() {
                                @Override
                                public void onSuccess(List<FirebaseVisionFace> faces) {
                                    // Task completed successfully

                                    // Do face analysis tasks here.
                            })
                    .addOnFailureListener(
                            new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    // Task failed with an exception
                                    // ...
                                }
                            });
}

如果此代码位于相应的 activity class 中,则它可以正常工作。然后,我将 classifyFaces 方法重写为 return 分析结果,并将其移至单独的包中。然后我从我的 activity 调用了新创建的 class 并且从未得到 return 值。

我认为这与 Firebase 任务的工作方式以及 classifyFaces 方法 returns 在 OnSuccessListener 被触发之前有关。
我尝试了不同的方法,例如将 DisplayImage activity 传递给 addOnSuccessListener 方法,但它没有用。

我该如何解决这个问题?

原因是Task是运行异步的。所以你的方法只是在它完成之前启动任务和 returns。

或许您可以将您的方法 return 设为任务。然后就可以在调用中注册onCompleteListener了activity。