Android中的内容提供器(一)

  所谓的内容提供器,就是相当于进程与进程之间的中间件,起到了一个搬运工的作用。要想访问内容提供器中共享的数据,需要用ContentResolver类,通过context的getContentResolver()方法获取到该类的实例。它接收的是一个uri对象,可以通过Uri.parse()方法可以将一个uri字符串解析成Uri对象。

  下面看下内容提供器的使用方法: 首先在联系人中添加一些数据,然后添加一个xml文件,就使用简单的ListView;



    
    

然后是MainActivity中的核心代码:

   private void readContacts() {
        Cursor cursor = null;
        try {
            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
            if (cursor!=null) {
                while(cursor.moveToNext()) {
                    String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    contactList.add(displayName+"\n"+number);
                }
                adapter.notifyDataSetChanged();
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor!=null) {
                cursor.close();
            }
        }

 这个readContacts方法的query方法却没有调用Uri.Parse()方法将uri字符串转化成uri对象,这是因为ContactsContract.CommonDataKinds.Phone类已经做好了封装,只需调用它的CONTENT_URI这个常量,他就是用uri.Parse()解析出来的结果。然后使用cursor对象进行遍历,将拼接好的数据添加到ListView的数据源,然后通知刷新ListView.最后关键的一点,Cursor的操作是很耗资源的,所以一定要记得关闭。然后在AndroidManifest.xml声明一下权限:

 

最后的运行结果:

 Android中的内容提供器(一)_第1张图片

你可能感兴趣的:(ContentResolver,Android学习)