2011-07-25 7 views
13

aquí está mi código, Eclipse no muestra ningún error, el programa de trabajo muy bien, pero simplemente no hace exactamente lo que quiero :)comparación de dos cadenas no funciona en Android

View image_view_danger_rate = (ImageView) findViewById(R.id.origin); 
    View image_view_origin = (ImageView) findViewById(R.id.danger_rate); 

    String entry_tag = (String) descriptionResultView.findViewById(resID).getTag(); 

    String dangerous = "dangerous"; 
    String not_dangerous = "not_dangerous"; 

    if (entry_tag == dangerous) { 
     image_view_danger_rate.setBackgroundResource(R.drawable.attention); 
    }else if (entry_tag == not_dangerous) { 
     image_view_danger_rate.setBackgroundResource(R.drawable.its_ok); 
     image_view_origin.setBackgroundResource(R.drawable.artificial); 
    } 

El la aplicación debe elegir entre dos imágenes para que aparezcan en la pantalla, dependiendo de una etiqueta almacenada en el archivo xml. Por lo tanto, si la etiqueta dice "peligroso", se debe mostrar la imagen de "atención". Si la etiqueta dice "not_dangerous", debe existir la imagen "its_ok".

Ahora, mostrar las imágenes sin una comparación if funciona perfectamente.

Si imprimo las etiquetas como una cadena, funciona, imprime correctamente "peligroso" o "no peligroso", dependiendo de la etiqueta.

Pero si hay una comparación if como se muestra arriba, no pasa nada, no se muestra ninguna imagen.

favor cualquier ayuda !! =)

+0

+1 para una pregunta elaborada y completa. – Marcelo

+0

Esta pregunta se ha formulado en este sitio más veces de las que me gustaría encontrar. Por favor, utilice la función de búsqueda. – Woot4Moo

+0

@ Woot4Moo La duplicación no es necesariamente mala. http://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/ – Marcelo

Respuesta

34

Uso string1.equalsIgnoreCase("something) o .equals("Something");

Con == (para cuerdas) en Java que está comparando son de misma referencia. Como lo hiciste es la prueba si ambos son objetos de cuerdas.

+0

Acabo de enterarme de algo ¡muy importante! = D funcionó para mí ... ¡gracias por esta rápida respuesta! – Silvan

5

Uso

entry_tag.equals(dangerous) 

que está comparando los objetos String reales, no su contenido. En Java, los operadores no están sobrecargados, por lo que == no se puede usar para comparar cadenas.

+0

gracias a todos ustedes, ¡esa fue la solución! – Silvan

1

En Java, si se desea comparar cadenas, es necesario utilizar equals():

if (entry_tag.equals(dangerous)) { 
} 
9

en Java, a == b se utiliza para comparar las referencias 2, no los objetos mismos.

así que si tiene 2 cadenas que desea comparar, use el método equals() en String. por ejemplo

boolean resultOfComparison=stringA.equals(stringB); 
+0

gracias a todos ustedes, esa fue la solución! – Silvan

Cuestiones relacionadas