首页 > 代码库 > 关于ContentProvider的一些例子(获取联系人)

关于ContentProvider的一些例子(获取联系人)

 ContentResolver:是Android的四大组件之一,主要用于对外共享数据。

Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。前提是已经获取其权限。

主要方法

public boolean onCreate() 在创建ContentProvider时调用
public Cursor query(Uri, String[], String, String[], String) 查询ContentProvider,返回一个Cursor
public Uri insert(Uri, ContentValues) 添加数据到ContentProvider中
public int update(Uri, ContentValues, String, String[]) 更新ContentProvider中的数据
public int delete(Uri, String, String[]) 从指定Uri的ContentProvider中删除数据
public String getType(Uri) 返回指定的Uri中的数据的MIME类型

ContentResolver

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。

ContentResolver提供的方法和ContentProvider提供的方法对应的有以下几个方法。
public Uri insert(Uri uri, ContentValues values) 用于添加数据到指定Uri的ContentProvider中。
public int delete(Uri uri, String selection, String[] selectionArgs) 用于从指定Uri的ContentProvider中删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 用于更新指定Uri的ContentProvider中的数据
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 用于查询指定Uri的ContentProvider。

 

3.Uri
Uri 代表了要操作的数据,Uri 主要包含了两部分信息:1、需要操作的
ContentProvider;2、对ContentProvider中的什么数据进行操作。一个Uri由以
下几部分组成: 
技术分享

 

package com.example.contentprovider;

import java.util.ArrayList;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity {

ListView listview;
ArrayAdapter< String>adapter;
List<String> data=http://www.mamicode.com/new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView) findViewById(R.id.list);
Log.i("ab", "a0");
adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1
,data);
listview.setAdapter(adapter);
Log.i("ab", "a1");
readContacts();

}
private void readContacts(){
Cursor cursor=null;
cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
null,
null,
null);
Log.i("ab", "a2");

while (cursor.moveToNext()) {
//获取联系人姓名
String displayName=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.i("ab", "a3");
//获取联系人手机号
String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.i("ab", "a4");
data.add(displayName+"\n"+number);
Log.i("ab", "a5");

}

}


}

步骤:

第一步:写listview控件,并找到控件

第二步:创建适配器

第三步:通过getContentResolver()的qury()方法查询并赋给cursor 对象(cursor 相当于一个指针的作用)

第四步:使用while 循环判断知道最后个数据被读出来。

未完待续:下一个例子 获取多媒体文件

 

此篇博客借鉴于http://caizhiyong.blog.51cto.com/3333164/1246769这篇博客如果有不明白的地方可去源博客。

ps 此博客作为笔记来用

 

关于ContentProvider的一些例子(获取联系人)