2010-08-26 25 views
10

Tôi có một ứng dụng Android mà tôi muốn kiểm tra xem tên ứng dụng được cài đặt có khớp với chuỗi được chuyển đến hàm chứa mã này không. Mã và ví dụ là dưới đây:Tại sao chuỗi so sánh String của tôi không thành công?

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

Giả sử bạn gọi checkInstalledApp("SetCPU"); và tên ứng dụng trên điện thoại được gọi là điều tương tự nó sẽ trả về true. Tuy nhiên, nó không bao giờ. Tôi đăng nhập các kết quả và nó phải phù hợp nhưng nó không. Bất cứ ai có thể xin vui lòng khai sáng cho tôi là tại sao điều này không hoạt động?

Trả lời

41

Sử dụng bình đẳng của String() phương pháp thay cho toán tử == cho chuỗi so sánh:

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

Trong Java, một trong những sai lầm phổ biến nhất người mới đáp ứng được sử dụng để so sánh == Strings. Bạn phải nhớ, == so sánh các tham chiếu đối tượng, không phải nội dung.

+1

Ah tôi thấy. Đó chắc chắn là một sai lầm mà người mới này đã thực hiện. Cảm ơn. –

5
+0

Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (http://meta.stackexchange.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo. –

+0

@JoachimSauer Eton đã trả lời đầy đủ câu hỏi, tôi đã cung cấp thêm thông tin. Có lẽ nó phải là một bình luận – 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; 
} 
Các vấn đề liên quan