Android ContentResolver使用

ContentResolver直譯爲內容解析器,Android中程序間數據的共享是經過Provider/Resolver進行的。提供數據(內容)的就叫Provider,Resovler提供接口對這個內容進行解讀。java

ContentResolver contentResolver = context.getContentResolver(); android

查詢:

簡單實例:(獲取聯繫人姓名)ide

public void fetchAllContacts() {  
    ContentResolver contentResolver = context.getContentResolver();  
    Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI, null, null, null, null);  
    cursor.getCount();  
    while(cursor.moveToNext()) {  
        System.out.println(cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)));
		System.out.println(cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME)));  
    }  
    cursor.close();  
}

query API及參數解析:

public final Cursor query (Uri uri, String[] projection,String selection,String[] selectionArgs, String sortOrder)

    第一個參數,uri,uri是什麼呢?好吧,上面咱們提到了Android提供內容的叫Provider,那麼在Android中怎麼區分各個Provider?有提供聯繫人的,有提供圖片的等等。因此就須要有一個惟一的標識來標識這個Provider,Uri就是這個標識,android.provider.ContactsContract.Contacts.CONTENT_URI就是提供聯繫人的內容提供者,惋惜這個內容提供者提供的數據不多。
    第二個參數,projection,真不知道爲何要用這個單詞,這個參數告訴Provider要返回的內容(列Column),好比Contacts Provider提供了聯繫人的ID和聯繫人的NAME等內容,若是咱們只須要NAME,那麼咱們就應該使用:fetch

Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI, new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME}, null, null, null); 

    固然,下面打印的你就只能顯示NAME了,由於你返回的結果不包含ID。用null表示返回Provider的全部內容(列Column)。
    第三個參數,selection,設置條件,至關於SQL語句中的where。null表示不進行篩選。若是咱們只想返回名稱爲張三的數據,第三個參數應該設置爲:spa

Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI, new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME}, android.provider.ContactsContract.Contacts.DISPLAY_NAME + "='張三'", null, null); 

    第四個參數,selectionArgs,這個參數是要配合第三個參數使用的,若是你在第三個參數裏面有?,那麼你在selectionArgs寫的數據就會替換掉?,code

Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI, new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME},   android.provider.ContactsContract.Contacts.DISPLAY_NAME + "=?", new String[]{"張三"}, null);  

    第五個參數,sortOrder,按照什麼進行排序,至關於SQL語句中的Order by。若是想要結果按照ID的降序排列:排序

Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI, null, null,null, android.provider.ContactsContract.Contacts._ID + " DESC");  

    升序,其實默認排序是升序,+" ASC"寫不寫效果都同樣:接口

Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI, null, null,null, android.provider.ContactsContract.Contacts._ID + " ASC");              
相關文章
相關標籤/搜索