2010-08-26 14 views
10

मेरे पास एक एंड्रॉइड ऐप है जहां मैं यह देखने के लिए जांचना चाहता हूं कि इंस्टॉल किया गया कोई ऐप नाम इस कोड वाले फ़ंक्शन पर पास की गई स्ट्रिंग से मेल खाता है या नहीं। कोड और उदाहरण नीचे है:स्ट्रिंग की तुलना में मेरी स्ट्रिंग क्यों विफल रही है?

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

आप यह मानते हुए checkInstalledApp("SetCPU"); को फोन किया और फोन पर ऐप्लिकेशन का नाम एक ही बात यह true लौट जाना कहा जाता है। हालांकि, यह कभी नहीं करता है। मैंने परिणामों को लॉग किया और इसे मेल खाना चाहिए लेकिन ऐसा नहीं है। क्या कोई मुझे बता सकता है कि यह क्यों काम नहीं करता है?

उत्तर

41

उपयोग स्ट्रिंग के बराबर() विधि के बजाय की तुलना स्ट्रिंग्स के लिए == ऑपरेटर:

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

जावा में, सबसे आम गलतियों नए चेहरे को पूरा स्ट्रिंग्स की तुलना करने के == उपयोग कर रहा है में से एक। आपको याद रखना होगा, == ऑब्जेक्ट संदर्भों की तुलना करता है, सामग्री नहीं।

+1

आह अच्छा। यह निश्चित रूप से इस नवागंतुक की गलती है। धन्यवाद। –

5

चेक बाहर नंबर 7: Top 10 - New Java Developer Errors

+0

जबकि इस सैद्धांतिक रूप से इस सवाल का जवाब कर सकते हैं, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) जवाब के आवश्यक हिस्से में शामिल हैं, और संदर्भ के लिए लिंक प्रदान करेंगे। –

+0

@ जोचिमसॉयर ईटन ने पहले से ही इस सवाल का पर्याप्त उत्तर दिया था, मैं अतिरिक्त जानकारी दे रहा था। शायद यह एक टिप्पणी होनी चाहिए थी – 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; 
} 
संबंधित मुद्दे