Java 如何从Android firebase ML Kit BarcodeScannerProcessor onSuccess查找上下文并启动新活动
我正在使用google提供的quickstart android代码,但经过多次尝试后,我无法找到不返回null的上下文。BarcodeScannerProcessor本身不是一个活动,因此我尝试创建LivePreviewActivity的实例,并将其用作intent中的上下文,但它为null 目标是一旦识别出有效的条形码,我想打开一个新的活动,允许用户验证值,并在按下按钮时调用Web服务,通过API将条形码发布到数据库。我很难找到一个有效的上下文,当它试图执行意图时,应用程序正在崩溃 从第97-107行开始: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
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安装需要修补,所以可能需要一段时间,我要上飞机了,而这个网络修补得不太好:/。我一定会跟进。非常感谢,不客气。我希望当你着陆并测试它时,它能工作。确保你有一个良好的人际网络