2014-05-21 144 views
3

我想根據therir ID獲取聯繫人列表的光標。我不確定如何將「IN」語句與一組參數一起使用。我目前造成的錯誤。ContentResolver和「IN」語句中的「where」條件

public Cursor GetContacts(String[] ids) 
{ 
    ContentResolver cr = getContentResolver(); 

    try 
    { 
     Uri uri = ContactsContract.Contacts.CONTENT_URI; 

     String[] projection = new String[] { 
       ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME, 
       ContactsContract.Contacts.HAS_PHONE_NUMBER 
     }; 

     String where = ContactsContract.Contacts._ID + " IN ?"; 

     String[] selectionArgs = ids; 

     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME; 

     return cr.query(uri, projection, where, selectionArgs, sortOrder); 
    } 
    catch (Exception ex) 
    { 
    String message = ex.getMessage(); 
    Log.e("mine", "Error: " + message, ex); 

    return null; 
    } 

錯誤:近 「?」:語法錯誤(代碼1):在編譯:選擇_id,DISPLAY_NAME,has_phone_number FROM view_contacts WHERE((1))AND((_id IN)?)ORDER BY DISPLAY_NAME

+0

它會導致哪個錯誤? – duplode

+0

@duplode,我更新了我的問題 – Anarion

+0

您是否試圖根據一個id或幾個基於ID數組的結果返回一個結果? –

回答

6

我沒有測試這個,但我認爲你需要將你的ID壓縮成一個逗號分隔的字符串,以便將它插入到你的查詢中。

public Cursor GetContacts(String[] ids) 
{ 
    ContentResolver cr = getContentResolver(); 

    try 
    { 
     Uri uri = ContactsContract.Contacts.CONTENT_URI; 

     String[] projection = new String[] { 
       ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME, 
       ContactsContract.Contacts.HAS_PHONE_NUMBER 
     }; 

     String where = ContactsContract.Contacts._ID + " IN (?)"; 

     String[] selectionArgs = {StringUtils.join(ids, ", ")}; 

     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME; 

     return cr.query(uri, projection, where, selectionArgs, sortOrder); 
    } 
    catch (Exception ex) 
    { 
    String message = ex.getMessage(); 
    Log.e("mine", "Error: " + message, ex); 

    return null; 
    } 
+0

我做了同樣的事情,但用於循環。有用。 – Anarion

0

我們可以添加在一部分本身

public Cursor getCursor() { 
Uri contentUri = Uri.withAppendedPath(ContentProviderDb.CONTENT_URI, TABLE_FEEDS); 
     String feedList = "27","79","78","77","31"; 

     String where = FEED_ID + " IN ("+feedList+") AND " + PLACE_ID + "=\"" +placeId+"\" AND " + PROFILE_ID + "=" + userId ; 

     return context.getContentResolver().query(contentUri, null, where, null, TIMESTAMP + " DESC"); 
} 

這裏如果選擇的參數值是字符串需要加轉義字符selectionArguments。