Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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 如何从Android firebase ML Kit BarcodeScannerProcessor onSuccess查找上下文并启动新活动_Java_Android_Firebase Mlkit_Google Mlkit - Fatal编程技术网

Java 如何从Android firebase ML Kit BarcodeScannerProcessor onSuccess查找上下文并启动新活动

Java 如何从Android firebase ML Kit BarcodeScannerProcessor onSuccess查找上下文并启动新活动,java,android,firebase-mlkit,google-mlkit,Java,Android,Firebase Mlkit,Google Mlkit,我正在使用google提供的quickstart android代码,但经过多次尝试后,我无法找到不返回null的上下文。BarcodeScannerProcessor本身不是一个活动,因此我尝试创建LivePreviewActivity的实例,并将其用作intent中的上下文,但它为null 目标是一旦识别出有效的条形码,我想打开一个新的活动,允许用户验证值,并在按下按钮时调用Web服务,通过API将条形码发布到数据库。我很难找到一个有效的上下文,当它试图执行意图时,应用程序正在崩溃 从第97

我正在使用google提供的quickstart android代码,但经过多次尝试后,我无法找到不返回null的上下文。BarcodeScannerProcessor本身不是一个活动,因此我尝试创建LivePreviewActivity的实例,并将其用作intent中的上下文,但它为null

目标是一旦识别出有效的条形码,我想打开一个新的活动,允许用户验证值,并在按下按钮时调用Web服务,通过API将条形码发布到数据库。我很难找到一个有效的上下文,当它试图执行意图时,应用程序正在崩溃

从第97-107行开始:

for(int i=0;i
您可以在回购中备份以查看

我试过很多东西,读过一些关于背景、观点和活动的书,基本上把自己完全弄糊涂了。我能找到的唯一的图坦卡门是使用科特林,这无助于澄清问题


我感谢任何帮助,以确定或反对一个有效的意图从这个上下文。谢谢。

因此我假设在您的
LivePreviewActivity
中,您正在创建一个类
BarcodeScanningProcessor
的对象。您可以做的是更改
BarcodeScanningProcessor
类中的构造函数以接受上下文,然后传入
LivePreviewActivity
的上下文

代码应该是这样的:

在条形码扫描处理器中:

然后在
LivePreviewActivity
中:

在您的活动的特定情况下,您会:

  case BARCODE_DETECTION:
          Log.i(TAG, "Using Barcode Detector Processor");
          cameraSource.setMachineLearningFrameProcessor(new BarcodeScanningProcessor(getApplicationContext()));
          break;
或者,如果您只想创建该类的对象,可以执行以下操作:
BarcodeScanningProcessor bsp=新的BarcodeScanningProcessor(getApplicationContext())


现在,这将为您的
BarcodeScanningProcessor
类提供活动的上下文。现在,在
BarcodeScanningProcessor
中,mContext不应为空,并且将具有您活动的上下文。我希望这能回答您的问题。

因此我假设在您的
LivePreviewActivity
中,您正在创建一个类
BarcodeScanningProcessor
的对象。您可以做的是更改
BarcodeScanningProcessor
类中的构造函数以接受上下文,然后传入
LivePreviewActivity
的上下文

代码应该是这样的:

在条形码扫描处理器中:

然后在
LivePreviewActivity
中:

在您的活动的特定情况下,您会:

  case BARCODE_DETECTION:
          Log.i(TAG, "Using Barcode Detector Processor");
          cameraSource.setMachineLearningFrameProcessor(new BarcodeScanningProcessor(getApplicationContext()));
          break;
或者,如果您只想创建该类的对象,可以执行以下操作:
BarcodeScanningProcessor bsp=新的BarcodeScanningProcessor(getApplicationContext())


现在,这将为您的
BarcodeScanningProcessor
类提供活动的上下文。现在,在
BarcodeScanningProcessor
中,mContext不应为空,并且将具有您活动的上下文。我希望这能回答你的问题。

试试这个创建
应用程序的类

import android.app.Application;

public class MyApplication  extends Application {
    static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance=this;
    }

    public static MyApplication getInstance() {
        return instance;
    }
}
在清单文件中注册

<application
        ..
        android:name="com.yourpackage.MyApplication"
        ..>
.
.
.
</application>

尝试创建
应用程序

import android.app.Application;

public class MyApplication  extends Application {
    static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance=this;
    }

    public static MyApplication getInstance() {
        return instance;
    }
}
在清单文件中注册

<application
        ..
        android:name="com.yourpackage.MyApplication"
        ..>
.
.
.
</application>

处理此问题的另一种方法是创建BarcodeScanningProcessor的新构造函数,该构造函数接受接口回调,处理完成后将结果传递回调用方

   public interface BarcodeUpdateListener {
      @UiThread
      void onBarcodeDetected(Barcode barcode);
   } 


   private BarcodeUpdateListener callback;

   public BarcodeScanningProcessor(BarcodeUpdateListener callback){
      this.callback = callback;
      detector = FirebaseVision.getInstance().getVisionBarcodeDetector();
   } 
一旦得到结果,将结果传递给调用者

callback.onBarcodeDetected(<Barcode>)
callback.onBarcodeDetected()

处理该问题的另一种方法是创建BarcodeScanningProcessor的新构造函数,该构造函数接受接口回调,处理完成后将结果传递回调用方

   public interface BarcodeUpdateListener {
      @UiThread
      void onBarcodeDetected(Barcode barcode);
   } 


   private BarcodeUpdateListener callback;

   public BarcodeScanningProcessor(BarcodeUpdateListener callback){
      this.callback = callback;
      detector = FirebaseVision.getInstance().getVisionBarcodeDetector();
   } 
一旦得到结果,将结果传递给调用者

callback.onBarcodeDetected(<Barcode>)
callback.onBarcodeDetected()

您可以从
graphicOverlay
获取上下文:

Context-Context=graphicsoverlay.getContext();

您可以从
graphicOverlay
获取上下文:

Context-Context=graphicsoverlay.getContext();

因此,我假设在LivePreviewActivity中,您正在创建BarcodeScanningProcessor类的对象。您可以做的是更改BarcodeScanningProcessor类中的构造函数以接受上下文,然后传入LivePreviewActivity的上下文。--啊!让我试一试。这是有道理的。试试上面的代码。我确信它现在应该可以工作了,因为您的
BarcodeScanningProcessor
类将具有您活动的上下文。如果它有效,请将此答案标记为已接受,以便那些有类似问题的人可以参考它并获得帮助。Ishaan,我非常感谢你这么快的回答。我肯定会标记为接受,一旦我可以验证它的工作,我相信它会。我的android studio安装需要修补,所以可能需要一段时间,我要上飞机了,而这个网络修补得不太好:/。我一定会跟进。非常感谢,不客气。我希望当你着陆并测试它时,它能工作。确保你有一个良好的人际网络