2010-08-26 8 views
10

J'ai une application Android où je veux vérifier si un nom d'application installé correspond à une chaîne passée à la fonction contenant ce code. Le code et l'exemple est ci-dessous:Pourquoi la comparaison String to String échoue-t-elle?

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; 
} 

En supposant que vous appelé checkInstalledApp("SetCPU"); et le nom de l'application sur le téléphone est appelé la même chose, il doit retourner true. Cependant, il ne le fait jamais. J'ai noté les résultats et il devrait correspondre mais ce n'est pas le cas. Quelqu'un peut-il m'éclairer pour savoir pourquoi cela ne fonctionne pas?

Répondre

41

Utilisez la méthode equals de String() au lieu de l'opérateur == pour les chaînes comparant:

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

En Java, l'une des erreurs les plus courantes des nouveaux arrivants rencontrent utilise == pour comparer des chaînes. Vous devez vous rappeler, == compare les références d'objets, pas le contenu.

+1

Ah, je vois. C'est définitivement une erreur de la part de ce nouveau venu. Merci. –

5
+0

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (http://meta.stackexchange.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. –

+0

@JoachimSauer Eton avait déjà suffisamment répondu à la question, je donnais des informations supplémentaires. Peut-être que ça aurait dû être un commentaire – 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; 
}