2010-08-26 11 views
10

Tengo una aplicación de Android donde quiero verificar si el nombre de una aplicación que está instalado coincide con una cadena que se transfiere a la función que contiene este código. El código y el ejemplo es el siguiente:¿Por qué mi comparación String to String falla?

private Boolean checkInstalledApp(String appName){ 
    PackageManager pm = this.getPackageManager(); 
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
    List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); 
    Boolean isInstalled = false; 
    for(ResolveInfo info: list) { 
     if (info.activityInfo.applicationInfo.loadLabel(pm).toString()==appName){ 
      isInstalled = true; 
      break; 
     } 
    } 

    return isInstalled; 
} 

Suponiendo que llama checkInstalledApp("SetCPU"); y el nombre de la aplicación en el teléfono se llama lo mismo debe devolver true. Sin embargo, nunca lo hace. Logré los resultados y debería coincidir, pero no es así. ¿Puede alguien por favor aclararme por qué esto no funciona?

Respuesta

41

Use iguales de la cadena() método en lugar del operador == para las cadenas que comparan:

info.activityInfo.applicationInfo.loadLabel(pm).toString().equals(appName) 

En Java, uno de los errores más comunes que los recién llegados se reúnen está utilizando == para comparar cadenas. Debe recordar que == compara las referencias de objeto, no el contenido.

+1

Ah veo. Eso es definitivamente un error que este recién llegado hizo. Gracias. –

5
+0

Si bien esto puede responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. –

+0

@JoachimSauer Eton ya había respondido suficientemente la pregunta, estaba dando información adicional. Tal vez debería haber sido un comentario – Blundell

0
public static boolean compaireString (String string, String string2) 
{ 
    // string == null && String2 == null or they reference the same object 
    if (string == string2) return true; 
    //we have to be sure that string is not null before calling a methode on it 
    if (string != null && string.equals(string2)) return true; 

    return false; 
}