首页 > 解决方案 > 在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***

即使变量为“真”,代码仍会运行一段时间,我不知道为什么。

标签: javaandroidif-statementdebugging

解决方案


在您的情况下,代码没有直接在块(或以某种语言命名的闭包/回调)addOnSuccessListener中运行addOnFailureListener

public void onSuccess(List < FirebaseVisionBarcode > barcodes) {
         Log.d("Works122", "trembotest " + isDetected);
         processResult(barcodes);
}

detector仅当每次都认为成功时才调用此块,这意味着'detector完成了,现在轮到你了。请处理来自检测器的结果'。

一旦您不需要回调结果,请调用名为removeOnSuccessListener. 但是您应该参考OnSuccessListenerand OnFailureListener


最后,您应该addListener在初始化步骤中(仅运行一次),并考虑侦听器内部的变量。


推荐阅读