导读ContentResolver 是 Android 提供的一种访问内容提供者的方式,它可以提供访问各种数据,如音频、视频、图片、短信和通讯录等。ContentResolver 可以查询、插入、更新和删除数

ContentResolver 是 Android 提供的一种访问内容提供者的方式,它可以提供访问各种数据,如音频、视频、图片、短信和通讯录等。ContentResolver 可以查询、插入、更新和删除数据,本文将介绍在 Android 中 ContentResolver 的使用方法。

ContentResolver 单表查询数据

contentresolver(contentresolver用什么方法查询content)

ContentResolver 查询数据的方式通过执行查询语句,下面是查询通讯录表中所有联系人姓名和电话的代码片段。

首先创建一个 Uri,代表我们要查询的表。

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

接着创建一个查询语句。

String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};

这里的 projection 参数是指我们要查询所有联系人姓名和电话号码,定义成数组形式。

然后执行 SQL 查询语句,调用 ContentProvider 中的 query 方法。

Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

这一步会返回一个 Cursor 对象,可以通过遍历 Cursor 来获取数据。

ContentResolver 联表查询数据

contentresolver(contentresolver用什么方法查询content)

当需要查询多张表中的数据时,就需要联表查询。例如,我们希望查询联系人表和联系人电话表中的信息,下面是查询联系人姓名、电话、邮箱的代码片段。

首先定义一个 Uri,代表要查询的两张表。

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

然后定义 SQL 查询语句。

String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Email.DATA};

projection 字段的值是要查询的列名,这里查询的是联系人姓名、电话、邮箱。

接着定义 SQLiteDatabase 中的 join 语句,用于联表查询。

String join = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + \"=\" + ContactsContract.CommonDataKinds.Email.CONTACT_ID;

这个 join 语句是针对两个表中都有 CONTACT_ID 这一列的表来连接的,最后调用 ContentProvider 中的 query 方法,获取 Cursor 对象。

Cursor cursor = getContentResolver().query(uri, projection, join, null, null);

最后遍历 Cursor 对象,获取数据。

ContentResolver 插入数据

contentresolver(contentresolver用什么方法查询content)

ContentResolver 还提供了插入、更新和删除数据的方法。例如,我们需要插入一条新的联系人信息,下面是插入数据的代码片段。

首先创建一个 ContentValues 对象,用于存储要插入的数据。

ContentValues values = new ContentValues();

接着设置要插入的数据,以通讯录表中的姓名和电话为例。

values.put(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, \"Tom\");

values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, \"1234567890\");

然后调用 ContentResolver 的 insert 方法,将数据插入到通讯录表中。

Uri uri = getContentResolver().insert(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, values);

insert 方法返回一个 Uri 对象,代表新插入的数据。

ContentResolver 更新数据

contentresolver(contentresolver用什么方法查询content)

如果需要更新数据,例如更新 Tom 的电话号码。下面是更新数据的代码片段。

首先创建一个 ContentValues 对象,设置要更新的数据。

ContentValues values = new ContentValues();

values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, \"0987654321\");

然后调用 ContentResolver 的 update 方法,更新数据。

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

String where = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + \" = ?\";

String[] whereArgs = {\"Tom\