您的位置:首页 > 移动开发 > Android开发

Android 中ContentProvider的用法及用ContentProvider访问联系人

2017-09-01 14:46 405 查看
一。概念:

 * ContentProvider,内容提供者,android四组件之一,可以跨程序访问数据;

 * 若用ContentProvider实现不同应用程序之间数据的共享,必须借助ContentResolver(内容解析器)类,

 * 1.获得ContentResolver对象:Context.getContentResolver();

 * 2.通过ContentResolver实例进行CRUD操作;

 * 3.当进行增删改查时,和SQLiteOpenHelper不同,不接受表名,而是接受一个URI参数。

 * 4.Uri格式:协议://权限/路径;


二。访问手机联系人实例:

public class MainActivity extends Activity {

private ListView listView;
private ArrayAdapter<String> adapter;
private List<String> data;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //得到ListVIew实例

        listView=(ListView) findViewById(R.id.listView);

        //得到数据源


        data=new ArrayList<String>();

        //创建适配器

        adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);

        //设置适配器

        listView.setAdapter(adapter);


    }

 //查询联系人
    public void queryContacts(View view){

    Cursor cursor=null;

    /**

    * 通过Context的getContentResolver(),得到一个ContentResolver对象,从而进行CRUD操作,

    * 和SQLiteOpenHelper的CRUD方法一样,不同的是,在ContentReslover进行CRUD操作时,不接受表名,

    * 而是接受一个Uri类型的对象作为参数,这个参数称为内容URI;

    * 内容URI的组成:协议://权限/路径;协议是content,权限一般是包名,如com.example,路径是对不同的表作

    * 区分,如存在两张表table1和table2,则完整的内容URI可以写成:content://com.example.person/table1,

    * 然后,把内容URI解析成Uri对象:Uri.Parse(String URI);

    * 

    */


    cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

    while(cursor.moveToNext()){

    String body=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

    String address=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

    data.add(body+"\n"+address);

    }

    //更新适配器

    adapter.notifyDataSetChanged();


    }

}

三。运行效果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: