高性价比
国外便宜VPS服务器推荐

android之ContentResolver与ContentProvider怎样用

Android之ContentResolver与ContentProvider的使用

作为Android开发中的两个重要组件,ContentResolver和ContentProvider在应用程序中起着至关重要的作用。ContentResolver用于访问应用程序的数据,而ContentProvider则提供了数据的访问接口。本文将从多个方面详细阐述Android之ContentResolver与ContentProvider的使用方法。

ContentResolver的使用

ContentResolver是Android中用于访问应用程序数据的核心类。它提供了多种方法来查询、插入、更新和删除数据。下面将介绍ContentResolver的几个常用方法。

查询数据

使用ContentResolver的query()方法可以查询数据。该方法接收四个参数:URI、要返回的列、查询条件和排序方式。例如,下面的代码查询了联系人的姓名和电话号码:

“`

Uri uri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = {ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHONE_NUMBER};

String selection = null;

String[] selectionArgs = null;

String sortOrder = null;

Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

if (cursor != null && cursor.moveToFirst()) {

do {

String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHONE_NUMBER));

// 处理数据

} while (cursor.moveToNext());

“`

插入数据

使用ContentResolver的insert()方法可以插入数据。该方法接收两个参数:URI和要插入的数据。例如,下面的代码插入了一条新的联系人数据:

“`

Uri uri = ContactsContract.Contacts.CONTENT_URI;

ContentValues values = new ContentValues();

values.put(ContactsContract.Contacts.DISPLAY_NAME, “John Doe”);

values.put(ContactsContract.Contacts.PHONE_NUMBER, “1234567890”);

Uri newUri = getContentResolver().insert(uri, values);

“`

更新数据

使用ContentResolver的update()方法可以更新数据。该方法接收三个参数:URI、要更新的数据和更新条件。例如,下面的代码更新了指定联系人的电话号码:

“`

Uri uri = ContactsContract.Contacts.CONTENT_URI;

ContentValues values = new ContentValues();

values.put(ContactsContract.Contacts.PHONE_NUMBER, “0987654321”);

String selection = ContactsContract.Contacts.DISPLAY_NAME + ” = ?”;

String[] selectionArgs = {“John Doe”};

int rowsUpdated = getContentResolver().update(uri, values, selection, selectionArgs);

“`

删除数据

使用ContentResolver的delete()方法可以删除数据。该方法接收三个参数:URI、删除条件和删除条件的参数。例如,下面的代码删除了指定联系人的数据:

“`

Uri uri = ContactsContract.Contacts.CONTENT_URI;

String selection = ContactsContract.Contacts.DISPLAY_NAME + ” = ?”;

String[] selectionArgs = {“John Doe”};

int rowsDeleted = getContentResolver().delete(uri, selection, selectionArgs);

“`

ContentProvider的使用

ContentProvider是Android中用于提供数据访问接口的类。通过ContentProvider,应用程序可以将数据暴露给其他应用程序,并且可以对数据进行权限控制。下面将介绍ContentProvider的几个重要概念和使用方法。

URI

在ContentProvider中,URI用于标识数据的位置。URI由三个部分组成:authority、path和optionalId。例如,下面的URI表示联系人数据的位置:

“`

content://com.example.contactsprovider/contacts/1

“`

MIME类型

在ContentProvider中,MIME类型用于标识数据的类型。MIME类型由两个部分组成:type和subtype。例如,下面的MIME类型表示联系人数据的类型:

“`

vnd.android.cursor.item/contact

“`

创建ContentProvider

要创建自己的ContentProvider,需要继承ContentProvider类并实现其中的几个方法,包括query()、insert()、update()和delete()等。例如,下面的代码演示了如何创建一个简单的ContentProvider:

“`

public class MyContentProvider extends ContentProvider {

// 初始化ContentProvider

@Override

public boolean onCreate() {

// 初始化数据库等操作

return true;

}

// 查询数据

@Override

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

// 执行查询操作

return cursor;

}

// 插入数据

@Override

public Uri insert(Uri uri, ContentValues values) {

// 执行插入操作

return newUri;

}

// 更新数据

@Override

public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

// 执行更新操作

return rowsUpdated;

}

// 删除数据

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

// 执行删除操作

return rowsDeleted;

}

// 返回MIME类型

@Override

public String getType(Uri uri) {

// 返回MIME类型

return mimeType;

}

“`

使用ContentProvider

使用ContentProvider时,首先需要获取ContentResolver实例,然后使用ContentResolver的方法来访问数据。例如,下面的代码演示了如何通过ContentResolver查询联系人数据:

“`

Uri uri = Uri.parse(“content://com.example.contactsprovider/contacts”);

String[] projection = {ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHONE_NUMBER};

String selection = null;

String[] selectionArgs = null;

String sortOrder = null;

Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

if (cursor != null && cursor.moveToFirst()) {

do {

String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHONE_NUMBER));

// 处理数据

} while (cursor.moveToNext());

“`

通过以上的介绍,相信读者对Android之ContentResolver与ContentProvider的使用方法有了更加详细的了解。无论是使用ContentResolver访问数据,还是创建自己的ContentProvider,都可以帮助开发者更好地管理和访问应用程序中的数据。

未经允许不得转载:一万网络 » android之ContentResolver与ContentProvider怎样用