java - 在android中使用“if”条件语句进行代码窃听
问题描述
我使用一条if
语句来不执行某些代码,但无论如何都会执行该代码,即使条件是不执行也是如此。
private void processImage(FirebaseVisionImage image) {
Log.d("Works122", "esad2123vrth12ing worked2313 " + isDetected);
if (!isDetected && permitScan) {
Log.d("Works122", "sd12222worked2313 " + isDetected);
detector.detectInImage(image).addOnSuccessListener(new OnSuccessListener < List < FirebaseVisionBarcode >> () {
@Override
public void onSuccess(List < FirebaseVisionBarcode > barcodes) {
Log.d("Works122", "trembotest " + isDetected);
processResult(barcodes);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("work12", "failure2");
}
});
} else {
Log.d("Works122", "failuresq1we2");
}
}
private void processResult(List < FirebaseVisionBarcode > firebaseVisionBarcodes) {
Log.d("work12", "evrth12ing worsadsadasked2313" + firebaseVisionBarcodes.size());
if (firebaseVisionBarcodes.size() > 0) {
isDetected = true;
FirebaseVisionBarcode item = firebaseVisionBarcodes.get(0);
Log.d("work12", "evrth12ing worked2313");
int value_type = item.getValueType();
switch (value_type) {
case FirebaseVisionBarcode.TYPE_TEXT:
{
Log.d("work12", "evrthing worked " + item.getRawValue());
}
break;
case FirebaseVisionBarcode.TYPE_WIFI:
{
Log.d("Works122", "Wifi " + isDetected);
AlertDialog diaBox = AskOption();
diaBox.show();
}
default:
break;
}
}
}
我运行这段代码,if
即使isDetected
是真的,也会执行该语句,并且在一段时间后它不再执行并开始正常工作。
这是我运行时的日志:
***2019-12-26 20:02:53.425 720-720/com.vizuprice.vizuprice D/Works122: trembotest false
2019-12-26 20:02:53.425 720-720/com.vizuprice.vizuprice D/Works122: Wifi true
2019-12-26 20:02:53.441 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.441 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.507 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.507 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.570 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.570 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.605 720-720/com.vizuprice.vizuprice D/Works122: trembotest true
2019-12-26 20:02:53.605 720-720/com.vizuprice.vizuprice D/Works122: Wifi true
2019-12-26 20:02:53.629 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.629 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.645 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.645 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.735 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.735 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.778 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313 true
2019-12-26 20:02:53.778 720-1025/com.vizuprice.vizuprice D/Works122: failuresq1we2
2019-12-26 20:02:53.805 720-720/com.vizuprice.vizuprice D/Works122: trembotest true
2019-12-26 20:02:53.805 720-720/com.vizuprice.vizuprice D/Works122: Wifi true
2019-12-26 20:02:53.841 720-1025/com.vizuprice.vizuprice D/Works122: esad2123vrth12ing worked2313
true***
即使变量为“真”,代码仍会运行一段时间,我不知道为什么。
解决方案
在您的情况下,代码没有直接在块(或以某种语言命名的闭包/回调)addOnSuccessListener
中运行addOnFailureListener
。
public void onSuccess(List < FirebaseVisionBarcode > barcodes) {
Log.d("Works122", "trembotest " + isDetected);
processResult(barcodes);
}
detector
仅当每次都认为成功时才调用此块,这意味着'detector
完成了,现在轮到你了。请处理来自检测器的结果'。
一旦您不需要回调结果,请调用名为removeOnSuccessListener
. 但是您应该参考OnSuccessListener
and OnFailureListener
。
最后,您应该addListener
在初始化步骤中(仅运行一次),并考虑侦听器内部的变量。
推荐阅读
- c# - 如何修复 C# 中的“属性是命名空间但像类型一样使用”错误
- javascript - 在每个页面上将状态重置为初始状态
- reactjs - GitHub和NPM repo相同标签版本material-ui的区别
- c# - Automapper 到 XML 序列化产生不需要的父 XML 元素
- c# - 无法访问 Azure WCF 中继获取“未找到终结点。终结点不存在。” 错误
- ios - 如何将 BoundingBox 从 VNRequest 转换为 CVPixelBuffer 坐标
- c# - 无接口 .NET 项目
- java - 使用 Java Apache POI 在 Excel 数据透视表中对具有日期和时间(按日期、月份和年份)的列进行分组
- c - 我检查字符串内容和长度的程序有一些问题
- docker - Helm 测试最佳实践