当前位置: 首页 > 知识库问答 >
问题:

FirebaseVisionImage:变量“image”可能尚未初始化

司空瑾瑜
2023-03-14

我试图使用Android Studio中的Google Firebase(机器学习工具包)的例子。将图像变量传递到检测器时出错。processImage方法(错误如下所示)。

我怎样才能克服这个错误?我必须使用FirebaseVisionImage。try-catch块中的fromFilePath,但错误消息告诉我image变量可能未初始化。

错误:变量映像可能尚未初始化

        FirebaseVisionImage image;

        try {
            image = FirebaseVisionImage.fromFilePath(MainMenuActivity.this,
                    Uri.fromFile(new File("/sdcard/Download/test.jpg")));
        } catch (IOException e) {
            e.printStackTrace();
        }

        FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance().getOnDeviceTextRecognizer();

        Task<FirebaseVisionText> result = detector.processImage(image)
                .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
                    @Override
                    public void onSuccess(FirebaseVisionText firebaseVisionText) {
                        // Task completed successfully
                        mainText.setText("Hello!");
                    }
                })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                // Task failed with an exception
                            }
                        }
                );

共有2个答案

司马高昂
2023-03-14

所有需要图像的代码都应该在try块中:

try {
    FirebaseVisionImage image = FirebaseVisionImage.fromFilePath(MainMenuActivity.this,
            Uri.fromFile(new File("/sdcard/Download/test.jpg")));
    Task<FirebaseVisionText> result = detector.processImage(image)
        .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
            @Override
            public void onSuccess(FirebaseVisionText firebaseVisionText) {
                // Task completed successfully
                mainText.setText("Hello!");
            }
        })
        .addOnFailureListener(
                new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Task failed with an exception
                    }
                }
        );
} catch (IOException e) {
    e.printStackTrace();
}

FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance().getOnDeviceTextRecognizer();

请注意,像您一样只打印运行时异常catch语句通常应该在调用堆栈中尽可能高。所以我建议将其移动到所有这些代码的代码中,甚至更高。请记住:如果你根本没有发现这个错误,Android也会打印出来。因此,考虑使用这个“代码> catch <代码>来实现什么,并相应地实现它。

魏雅惠
2023-03-14

这个错误出现是因为这段代码

FirebaseVisionImage image;

try {
  image = FirebaseVisionImage.fromFilePath(
             MainMenuActivity.this,
             Uri.fromFile(new File("/sdcard/Download/test.jpg"))
          );
} catch (IOException e) {
  e.printStackTrace();
}

现在,问问你自己,如果在try块中抛出一个Exctive,那么Image会发生什么情况?
变量可能被分配了一个有效的值,也可能没有。

因为您让执行流继续(您没有将Exctive抛到上层),编译器不能确定这一点,因为异常是在运行时抛出的。
并且因为在Java中,本地变量必须在使用前初始化(即使使用=null),编译器告诉您这样做。

错误:变量映像可能尚未初始化

解决方案可能是用null初始化它

FirebaseVisionImage image = null;

或者,一个更好的方法,让Exctive转义。这将表明有一个bug。
您还可以从try-get块中完全打开您的代码。

 类似资料:
  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

  • 所以我已经在结果中声明了相关字符串的值,但是它仍然说我的变量“result”可能还没有初始化。 我正在尝试实现与此类似的输出。任何人都可以帮我吗?谢谢!

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我

  • 问题内容: 我得到错误: TestCounter.java:115:变量计数器可能尚未初始化counters [i] = new Counter(i); 而且我不知道如何解决它。我知道我的课程“” 有效。下面是我的代码,如果您可以看一下,我将非常高兴。此代码包装在类的main方法中。 问题答案: 您尚未创建数组,只是声明了变量。 您需要这样做: 或类似的东西

  • 在最后一行显示为时出错 :::: 变量结果可能尚未初始化 这是我的代码:

  • 问题内容: UI类在View中,导入已完成,但是在最后一个表达式中我得到了错误。 我是Java的入门者,但我不明白为什么我不允许这样使用它。 问题答案: 如果要在Java方法中声明变量/对象,则需要对其进行初始化。 简单来说 在您的情况下,它是一个正在访问方法的对象,因此,如果不初始化它,就像 它会给你一个NULL指针异常。 希望能帮助到你。