package com.changcheng.sqlite.provider;
import com.changcheng.sqlite.MyOpenHelper;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class ContactContentProvider extends ContentProvider {
// 通过UriMatcher匹配外部请求
private static UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
// 通过openHelper进行数据库读写
private MyOpenHelper openHelper;
// 匹配状态常量
private static final int CONTACT_LIST = 1;
private static final int CONTACT = 2;
// 表名
private static final String tableName = "contacts";
// 添加Uri
static {
uriMatcher.addURI("com.changcheng.sqlite.provider", "contact",
CONTACT_LIST);
uriMatcher.addURI("com.changcheng.sqlite.provider", "contact/#",
CONTACT);
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = this.openHelper.getWritableDatabase();
int result;
switch (uriMatcher.match(uri)) {
case CONTACT_LIST:
result = db.delete(tableName, selection, selectionArgs);
break;
case CONTACT:
long id = ContentUris.parseId(uri);
String where = "_id=" + id;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
result = db.delete(tableName, where, selectionArgs);
break;
default:
throw new IllegalArgumentException("Uri IllegalArgument:" + uri);
}
return result;
}
@Override
public String getType(Uri uri) {
switch (uriMatcher.match(uri)) {
case CONTACT_LIST:// 集合类型必须在前面加上vnd.android.cursor.dir/
return "vnd.android.cursor.dir/contactlist";
case CONTACT:// 非集合类型必须在前面加上vnd.android.cursor.item/
return "vnd.android.cursor.item/contact";
default:
throw new IllegalArgumentException("Uri IllegalArgument:" + uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = this.openHelper.getWritableDatabase();
long id;
switch (uriMatcher.match(uri)) {
case CONTACT_LIST:
// 因为后台需要生成SQL语句,当values为null时,必须提第二个参数。生成的SQL语句才不会出错!
id = db.insert(tableName, "_id", values);
return ContentUris.withAppendedId(uri, id);
case CONTACT:
id = db.insert(tableName, "_id", values);
String uriPath = uri.toString();
String path = uriPath.substring(0, uriPath.lastIndexOf("/")) + id;
return Uri.parse(path);
default:
throw new IllegalArgumentException("Uri IllegalArgument:" + uri);
}
}
@Override
public boolean onCreate() {
this.openHelper = new MyOpenHelper(this.getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = this.openHelper.getWritableDatabase();
switch (uriMatcher.match(uri)) {
case CONTACT_LIST:
return db.query(tableName, projection, selection, selectionArgs,
null, null, sortOrder);
case CONTACT:
long id = ContentUris.parseId(uri);
String where = "_id=" + id;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
return db.query(tableName, projection, where, selectionArgs, null,
null, sortOrder);
default:
throw new IllegalArgumentException("Uri IllegalArgument:" + uri);
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase db = this.openHelper.getWritableDatabase();
int result;
switch (uriMatcher.match(uri)) {
case CONTACT_LIST:
result = db.update(selection, values, selection, selectionArgs);
break;
case CONTACT:
long id = ContentUris.parseId(uri);
String where = "_id=" + id;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
result = db.update(tableName, values, where, selectionArgs);
break;
default:
throw new IllegalArgumentException("Uri IllegalArgument:" + uri);
}
return result;
}
}
|
相关推荐
Android开发实战经典_030804_ContentProvider_A_ContentProvider简介视频教程.zip
相关概念介绍1)ContentProvider简介当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式...
1)ContentProvider简介 当应用继承ContentProvider类 并重写该类用于提供数据和存储数据的方法 就可以向其他应用共享其数据 虽然使用其他方法也可以对外共享数据 但数据访问方式会因数据存储的方式而不同 如:采用...
ContentProvider简介 ContentProvider是Android系统提供的一种标准接口,用于在不同应用程序之间共享数据。它允许一个应用的数据可以被其他应用访问,同时也提供了数据安全性和隐私保护。 ### 2. 简单的...
1. ContentProvider 简介: ContentProvider 是 Android 系统中负责数据存储和检索的组件,它封装了数据存储的具体实现,使得开发者无需关注底层存储细节。ContentProvider 使用表格形式组织数据,并通过 Uri...
1. **ContentProvider简介** - ContentProvider是Android系统提供的一种机制,使得应用程序可以将自己的数据暴露给其他应用,同时也可访问其他应用的数据,实现数据的跨应用共享。 - 它遵循统一的URI(Uniform ...
1. **ContentProvider简介** ContentProvider是Android四大组件之一,它允许应用程序之间共享数据。每个ContentProvider都对应一个URI(统一资源标识符),通过这个URI,其他应用可以读取或修改ContentProvider管理...
一、ContentProvider 简介 ContentProvider 是 Android 中的一种特殊组件,主要用于提供数据共享和交换的功能。ContentProvider 可以将数据提供给其他应用程序,或者从其他应用程序获取数据。ContentProvider 的...
**一、ContentProvider简介** ContentProvider是Android系统提供的一种标准接口,用于在应用之间共享数据。它可以存储和检索结构化的数据,并支持其他应用通过URI(统一资源标识符)来访问这些数据。通过...
本文将详细介绍 ContentProvider 的主要功能、运行时权限的简介、机制设计和代码示例。 ContentProvider 的主要功能 ------------------------- ContentProvider 是 Android 中的一种机制,用于在不同的应用程序...
9.1.1 ContentProvider简介 352 9.1.2 Uri简介 353 9.1.3 使用ContentResolver操作 数据 354 9.2 操作系统的ContentProvider 355 9.2.1 使用ContentProvider管理 联系人 355 9.2.2 使用...
- ContentProvider简介:提供跨应用数据共享的接口。 - 实现ContentProvider:创建自定义的ContentProvider,定义Uri映射和CRUD操作。 - 使用ContentResolver:其他应用通过ContentResolver与ContentProvider进行...
- **2.2.5 ContentProvider简介**:说明ContentProvider的作用以及如何实现数据共享。 - **2.2.6 Intent和IntentFilter简介**:解释Intent和IntentFilter的基本概念及其在Android中的应用。 - **2.3 小结**:回顾...
- **ContentProvider简介**:`ContentProvider`是Android四大组件之一,主要用于实现不同应用程序之间的数据共享。例如,系统内置的联系人应用就是通过`ContentProvider`来存储和访问数据的。 - **应用场景**:在...
1. **ContentProvider简介**: ContentProvider是Android系统中用于在应用程序之间共享数据的一个接口。通过ContentProvider,一个应用可以将自己的数据暴露给其他应用,同时也可以访问其他应用公开的数据。 2. **...
#### 三、Uri 类简介 **Uri**(Uniform Resource Identifier)用于表示要操作的数据资源,它是 ContentProvider 体系中的核心概念之一。Uri 主要包含以下信息: 1. **Scheme**:对于 ContentProvider,固定的 ...
6.1 内容提供者简介 内容提供者是Android中进行跨应用数据交换的标准API。每个ContentProvider都需要实现一系列的抽象方法,包括onCreate()、delete()、getType()、insert()、query()和update()。当其他应用想要访问...