2012-04-16 53 views
0

我想從聯繫人名稱中檢索電話號碼。所以我有這個代碼在SQLite中用字符串查詢

public String getPhoneNumber(String name) { 
    String phonenumber = ""; 
    ContentResolver cr = getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      "DISPLAY_NAME LIKE '%" + name + "%'", null, null); 
    if (cursor.moveToFirst()) { 
     String contactId = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Contacts._ID)); 
     // 
     // Get all phone numbers. 
     // 
     Cursor phones = cr.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID 
       + " = " + contactId, null, null); 
     while (phones.moveToNext()) { 
      String number = phones.getString(phones 
        .getColumnIndex(Phone.NUMBER)); 
      int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
      switch (type) { 
      case Phone.TYPE_HOME: 
       //phonenumber = number; 
       // do something with the Home number here... 
       break; 
      case Phone.TYPE_MOBILE: 
       phonenumber = number; 
       // do something with the Mobile number here... 
       break; 
      case Phone.TYPE_WORK: 
       //phonenumber = number; 
       // do something with the Work number here... 
       break; 
      } 
     } 
     phones.close(); 
     // 
     // Get all email addresses. 
     // 

    } 
    cursor.close(); 
    return phonenumber; 
} 

但是,如果聯繫人名稱與db中的名稱完全不匹配,它將不會返回任何內容。因此,即使輸入名稱不太可能,是否有任何方法來檢索電話號碼?

例如,有一個聯繫人:原型Alex和我的輸入名稱是:prototype或alex。

+0

''Prototype Alex'LIKE'%prototype%''是真的(如果這是有效的語法) – zapl 2012-04-16 13:36:38

回答

0

這不是您的具體問題的答案,但它可能會有所幫助。有像Levenshtein距離,soundex或metaphone approximate string matching算法。 也許它可能是您的一個選擇,從內容提供商獲取所有聯繫人,然後使用其中一種算法進行搜索。

+0

感謝隊友:D,我會試試這個! – 2012-04-16 13:48:15

+0

我發現另一個問題!,如果聯繫人的名稱是「Ân」(unicode字符),那麼我嘗試用「â」或「Ân」查詢,返回數據爲null。但是,如果我返回數據是正確的使用「=」而不是「like」。所以我該怎麼做 ? – 2012-04-16 13:58:08