Mi sentencia java if no parece estar funcionando

No estoy seguro de por qué, pero cuando uso zxing en mi aplicación Android para obtener un código de barras el formato devuelve como EAN_13 pero mi si staement decide que no, entonces me muestra EAN_13 en mi notificación tostada. ¿Alguna pista sobre por qué está roto?

 public void onActivityResult(int requestCode, int resultCode, Intent intent) { IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); if (scanResult != null) { if (resultCode == 0){ //If the user cancels the scan Toast.makeText(getApplicationContext(),"You cancelled the scan", 3).show(); } else{ String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT").toString(); if (format == "EAN_13"){ //If the barcode scanned is of the correct type then pass the barcode into the search method to get the product details Toast.makeText(getApplicationContext(),"You scanned " + contents, 3).show(); } else{ //If the barcode is not of the correct type then display a notification Toast.makeText(getApplicationContext(),contents+" "+format, 3).show(); } } } } 

En Java, no puede (bien, no debería ) utilizar el operador == para comparar dos cadenas. Deberías usar:

 if (stringOne.equals(stringTwo)) { ... } 

O, en su caso:

 if ("EAN_13".equals(format)) { ... } 

En Java, al trabajar con objetos, el operador doble iguala compara dos objetos por igualdad de referencia . Si usted tiene dos cuerdas:

 String one = "Cat"; String two = "Cat"; boolean refEquals = (one == two); // false (usually.) boolean objEquals = one.equals(two); // true 

Digo que por lo general no será cierto, porque dependiendo de cómo la creación de cadenas se implementa en el sistema, podría ahorrar memoria al permitir que ambas variables para apuntar a la misma pieza de memoria. Pero, es una práctica muy pobre esperar que esto funcione.

Nota lateral: al utilizar la estrategia anterior, debe asegurarse de que la primera cadena no es null o lanzará una NullPointerException . Si tiene la capacidad de incluir bibliotecas externas en su proyecto, recomendaría la biblioteca Apache Commons Lang, que permite:

 StringUtils.equals(stringOne, stringTwo); 

Cuando usas == estás comparando las dos referencias para ver si son el mismo objeto (es decir, apuntan a la misma dirección en la memoria), en lugar de comparar los valores de los objetos. En su lugar, utilice format.equals("EAN_13") .

Para la comparación de cadenas debe tener que usar el método .equals (), en realidad esto es hacer la comparación de dos objetos, y este método pertenece a clase de objetos en java. p.ej:

  String val = "abc"; if(val.equals("abc")){ System.out.println("stings are equal!"); } 

por otro lado puede utilizar la función .compareTo () en Comparable interface, eq:

 String val = "abc"; if(val.compareTo("abc")==0){ System.out.println("stings are equal!"); } 

** esto es igual que el anterior por ejemplo

En java no puedes comparar String con == así que por favor reemplaza a estos operadores por los .compareTo("str") o .equals() .

  • DataMatrix-codificación con zxing sólo genera 14px mapa de bits
  • Zxing onActivityResult no se llama en Fragmento sólo en Actividad
  • ¿Cómo iniciar una actividad con un Intent y pasar una variable en la nueva actividad?
  • EXCEPCIÓN INESPERADA DE SUPERIOR NIVEL: com.android.dex.DexException
  • ¿Cómo abrir la pantalla de escaneo "zxing Barcode" en una pequeña ventana?
  • Incorporación de ZXing en la aplicación de Android
  • Cómo activar la exploración de modo masivo en zxing
  • Lanzamiento de un fragmento después de ZXing 2.0 QR-Code Scan
  • Utilizar la biblioteca de Zxing en PreviewFrame para aumentar la realidad
  • Integración de la biblioteca de ZXing directamente en mi aplicación de Android
  • Zxing modo retrato de la cámara y el paisaje en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.