如何在单独的UI活动中检索Firebase任务结果

时间:2018-11-28 13:53:44

标签: android firebase firebase-mlkit

我目前正在尝试使用ML Kit和本地Firebase框架来检测和分析人脸。
我有一个画廊活动,用户可以选择一个图像,然后转到另一个活动,在该活动中显示所选图像并分析人脸(我将代码简化为使问题更清楚):

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
                                    // ...
                                }
                            });
}

如果此代码位于各自的活动类中,则该代码可以正常工作。然后,我重写了classifyFaces方法以返回分析结果,并将其移动到单独的程序包中。然后我从我的活动中调用了新创建的类,但再也没有返回值。 我认为这与Firebase任务的工作方式以及在OnSuccessListener被触发之前返回classifyFaces方法有关。
我尝试了其他方法,例如将DisplayImage活动传递给addOnSuccessListener方法,但是它不起作用。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

原因是任务正在异步运行。因此,您的方法只是启动Task并在完成之前返回。

也许您可以使您的方法返回一个Task。然后,您可以在调用活动中注册onCompleteListener。