`
百合不是茶
  • 浏览: 354823 次
社区版块
存档分类
最新评论

contentResolver.query()参数详解(转)

阅读更多

收藏csdn的博客,介绍的比较详细,新手值得一看

1.获取联系人姓名

一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NAME。

[java] view plaincopy
 
  1. public void fetchAllContacts() {  
  2.     ContentResolver contentResolver = this.getContentResolver();  
  3.     Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  4.             nullnullnullnull);  
  5.     cursor.getCount();  
  6.     while(cursor.moveToNext()) {  
  7.         System.out.println(cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)));  
  8.         System.out.println(cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME)));  
  9.     }  
  10.     cursor.close();  
  11. }  

执行结果:

[java] view plaincopy
 
  1. 11-05 14:13:09.987: I/System.out(4692): 13  
  2. 11-05 14:13:09.987: I/System.out(4692): 张三  
  3. 11-05 14:13:09.987: I/System.out(4692): 31  
  4. 11-05 14:13:09.987: I/System.out(4692): 李四  

解释:

 

[java] view plaincopy
 
  1. ContentResolver contentResolver = this.getContentResolver();  

如果实现Fragment中要进行内容提供者的操作: 

 FragmentActivity  fragmentActivity = getActivity();获得当前的Activity

ContentResolver contentResolver = fragmentActivity .getContentResolver()

 

this在这里指的是MainActivity,ContentResolver直译为内容解析器,什么东东?Android中程序间数据的共享是通过Provider/Resolver进行的。提供数据(内容)的就叫Provider,Resovler提供接口对这个内容进行解读。

在这里,系统提供了联系人的Provider,那么我们就需要构建一个Resolver来读取联系人的内容。

 

[java] view plaincopy
 
  1. Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  2.                 nullnullnullnull);  

根据Android文档,

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

第一个参数,uri,rui是什么呢?好吧,上面我们提到了Android提供内容的叫Provider,那么在Android中怎么区分各个Provider?有提供联系人的,有提供图片的等等。所以就需要有一个唯一的标识来标识这个Provider,Uri就是这个标识,android.provider.ContactsContract.Contacts.CONTENT_URI就是提供联系人的内容提供者,可惜这个内容提供者提供的数据很少。

 

第二个参数,projection,真不知道为什么要用这个单词,这个参数告诉Provider要返回的内容(列Column),比如Contacts Provider提供了联系人的ID和联系人的NAME等内容,如果我们只需要NAME,那么我们就应该使用:

 

[java] view plaincopy
 
  1. Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  2.     new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME}, nullnullnull);  

当然,下面打印的你就只能显示NAME了,因为你返回的结果不包含ID。用null表示返回Provider的所有内容(列Column)。

 

第三个参数,selection,设置条件,相当于SQL语句中的where。null表示不进行筛选。如果我们只想返回名称为张三的数据,第三个参数应该设置为:

 

[java] view plaincopy
 
  1. Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  2.     new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME},  
  3.     android.provider.ContactsContract.Contacts.DISPLAY_NAME + "='张三'"nullnull);  

结果:

 

 

[java] view plaincopy
 
  1. 11-05 15:30:32.188: I/System.out(10271): 张三  

第四个参数,selectionArgs,这个参数是要配合第三个参数使用的,如果你在第三个参数里面有?,那么你在selectionArgs写的数据就会替换掉?,

 

 

[java] view plaincopy
 
  1. Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  2.     new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME},  
  3.     android.provider.ContactsContract.Contacts.DISPLAY_NAME + "=?",  
  4.                 new String[]{"张三"}, null);  

效果和上面一句的效果一样。

第五个参数,sortOrder,按照什么进行排序,相当于SQL语句中的Order by。如果想要结果按照ID的降序排列:

 

[java] view plaincopy
 
  1. Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  2.                 nullnull,null, android.provider.ContactsContract.Contacts._ID + " DESC");  

结果:

 

 

[java] view plaincopy
 
  1. 11-05 16:00:32.808: I/System.out(12523): 31  
  2. 11-05 16:00:32.808: I/System.out(12523): 李四  
  3. 11-05 16:00:32.817: I/System.out(12523): 13  
  4. 11-05 16:00:32.817: I/System.out(12523): 张三  

升序,其实默认排序是升序,+" ASC"写不写效果都一样:

 

 

[java] view plaincopy
 
  1. Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,  
  2.                 nullnull,null, android.provider.ContactsContract.Contacts._ID + " ASC");  

结果:

 

 

[java] view plaincopy
 
  1. 11-05 15:59:10.327: I/System.out(12406): 13  
  2. 11-05 15:59:10.327: I/System.out(12406): 张三  
  3. 11-05 15:59:10.327: I/System.out(12406): 31  
  4. 11-05 15:59:10.327: I/System.out(12406): 李四  
0
0
分享到:
评论

相关推荐

    contentResolver数据库操作.docx

    ContentResolver数据库操作通常涉及到四种基本操作:增(Insert)、删(Delete)、改(Update)以及查(Query)。下面将详细探讨这些操作。 ##### (一)删除数据 ```java switch (uriMatcher.match(uri)) { case...

    android 内容提供者

    【Android 内容提供者详解】 在Android操作系统中,内容提供者(Content Provider)是四大组件之一,它扮演着数据共享的关键角色。内容提供者允许应用程序之间共享和访问数据,即使这些数据存储在私有数据库、文件...

    Android内容提供者(Content provider)

    2. **使用**:客户端通过`ContentResolver`与Content Provider交互,使用`ContentResolver.query()`, `ContentResolver.insert()`, `ContentResolver.update()`, 和 `ContentResolver.delete()`方法。 ```java ...

    andoid中ContentProvider完整实例.

    例如,我们可以使用`ContentResolver.query()`、`ContentResolver.insert()`等方法进行数据操作,并使用`UriMatcher`来匹配不同Uri对应的ContentProvider操作。 在实际开发中,ContentProvider常用于实现跨应用的...

    Android中ContentProvider和ContentResolver详解

    Android中ContentProvider和ContentResolver详解 ContentProvider是Android系统中的一种机制,它允许应用程序之间共享数据。它提供了一种标准化的方式来存储和管理数据,使得不同的应用程序可以访问和共享数据。...

    android 的一个通讯录小程序

    2. 请求读取联系人权限后,可以通过ContentResolver.query()方法查询联系人,将结果填充到适配器,展示在ListView或RecyclerView上。 3. 同样,也可以使用ContentResolver.insert(), update()和delete()来添加、修改...

    android 根据uri获取真实路径

    ### Android根据URI获取真实路径详解 #### 概述 在Android开发过程中,处理文件路径时经常需要将一个`Uri`转换成真实的文件路径。尤其是在处理用户通过文件选择器选取的图片或文件时,通常会得到一个`Uri`,而这个...

    android 联系人详解

    Cursor cursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); ``` 这将返回一个Cursor对象,可以遍历查询结果,获取每个联系人的信息。 ...

    博客《Uri详解之——Uri结构与代码提取》对应源码

    这个博客《Uri详解之——Uri结构与代码提取》的源码提供了深入理解Uri类的实例和实践,有助于开发者更好地理解和操作Uri。下面将详细探讨Uri的相关知识点。 1. **Uri基本概念**: Uri,全称Uniform Resource ...

    android-read-browser-bookmark.7z

    使用ContentResolver的query方法,传入Bookmarks_URI、查询列、筛选条件、排序方式等参数: ```java String[] projection = { Browser.BookmarkColumns._ID, Browser.BookmarkColumns.URL, Browser.BookmarkColumns...

    androdi ContentProvider和Uri详解

    在上述代码中,`getContentResolver()`获取当前上下文的ContentResolver实例,`Uri.parse()`解析Uri字符串,`query()`方法则执行查询操作,返回一个Cursor对象,用于遍历查询结果。 TestCP可能是本次讲解的一个实践...

    android4.4获取图库文件路径方法

    ### Android 4.4 获取图库文件路径方法详解 在Android开发中,处理多媒体资源时经常需要访问设备上的图片文件。对于Android 4.4(KitKat)及以上版本,由于安全性和API的变化,获取图库中的图片路径变得更加复杂。...

    安卓ContentProvider详解例程

    6. **测试与使用**:创建一个简单的Activity,使用`ContentResolver`和`Uri`来访问ContentProvider提供的数据。例如: ``` Cursor cursor = getContentResolver().query( Uri.parse("content://...

    android 读取电话号码

    ### Android读取电话号码知识点详解 #### 一、概述 在Android开发中,有时候我们需要让应用具有读取用户电话号码的功能,例如为了实现快速拨号、导入联系人等功能。根据提供的代码片段,我们可以看到这是一个简单...

    Android Content Provider详解及示例代码

    3. 使用ContentResolver的query方法,传入预定义的URI(如ContactsContract.Contacts.CONTENT_URI),以及选择器(null表示获取所有数据)、分组、排序等参数,来获取一个Cursor对象,这个对象包含了查询结果。...

    android项目通话记录源代码

    【Android项目通话记录源代码详解】 在Android平台上,通话记录是手机系统中不可或缺的一部分,它允许用户查看、管理他们的通话历史,包括未接电话、已接电话和已拨电话。这个"android项目通话记录源代码"正是针对...

    Android多版本兼容示例

    ### Android多版本兼容示例详解 #### 一、引言 随着Android系统版本的不断更新迭代,为了确保应用能够在不同的Android版本中正常运行,开发者必须考虑应用的多版本兼容性问题。本文将通过一个示例来详细介绍如何...

    android 获得通话记录

    ### Android获取通话记录知识点详解 #### 一、概述 在Android开发中,有时我们需要访问设备上的通话记录,例如实现拨号记录查询的功能。这通常涉及到对Android系统内部数据的访问和处理。根据提供的代码片段来看,...

Global site tag (gtag.js) - Google Analytics