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;
}
}
|
相关推荐
相关概念介绍1)ContentProvider简介当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式...
1)ContentProvider简介 当应用继承ContentProvider类 并重写该类用于提供数据和存储数据的方法 就可以向其他应用共享其数据 虽然使用其他方法也可以对外共享数据 但数据访问方式会因数据存储的方式而不同 如:采用...
2 2 5 ContentProvider简介 2 2 6 Intent和IntentFilter简介 2 3 小结 第3章 Android布局管理器 3 1 控件类概述 3 1 1 View类简介 3 1 2 ViewGroup类简介 3 2 线性布局 3 2 1 LinearLayout类简介 3 2 2 线性布局案例...
ContentProvider使用简介里面的demo
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 使用...
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管理 多媒体...
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管理 多媒体...
1.2 Android简介 1.2.1 Andriod的历史 1.2.2 Andriod的未来 1.2.3 Andriod平台的技术架构 1.3 Android应用程序构成 1.3.1 活动(Activity) 1.3.2 意图(Intent) 1.3.3 服务(Service) 1.3.4 内容提供器...
Android系统中有4大组件: Activity、Service、Broadcast、ContentProvider. 一个Android应用程序(Apk)中可以包含一个或多个组件. 从开发者的角度来说, 当我们想做一个Apk时, 一般会弄一个文件夹, 在文件夹下面会...
1.1.1 Android的发展和简介 1.1.2 Android平台架构及特性 1.2 搭建Android开发环境 1.2.1 下载和安装Android SDK 1.2.2 安装Eclipse和ADT插件 1.3 Android常用开发工具的用法 1.3.1 创建、删除和浏览AVD ...
Kotlin语法实战与Android应用笔记:...5、全面地罗列了Android系统的常用组件:Activity、Service、BraodcastReceiver和ContentProvider,各Wedget的成员属性和方法,包括AlertDialog的几种用法,List的Adapter构造等。
内容简介 《Android基础教程(第3版·修订版)》是一部关于Android开发的基础教程,采用Pragmatic系列图书一贯由浅入深、循序渐进的方式讲解了Android程序设计的核心概念和技术。书中不仅结合数独游戏开发案例形象...
第1章 androi简介 1.1 初识android 1.1.1 历史背景 1.1.2 android特性 1.1.3 android组件结构 1.1.4 android应用程序框架 1.1.5 android的竞争优势 1.1.6 android模拟器 1.2 搭建android开发环境 1.2.1 准备工作 ...
主要包括Android简介、Android开发环境的搭建、Activity技术、Android用户界面布局、Android Intent、Android广播机制、Android Service、Android数据存储、Android ContentProvider以及Android网络编程技术。
ContentProvider、ContentResolver 6.5 105 Intent 106 用Intent启动Activity,并在Activity之间传递数据 106 调用其他应用程序中的Activity(打电话、浏览网页、发Email等) 109 接收和发送广播 113 接收系统广播 113...
内容简介 本书分为三个部分,包括基础篇、技术篇和应用篇。由浅入深地讲述了Android应用开发的方方面面。 第一篇 基础篇 第1章 Android概述 Android概述,讲述了Android的前生后世、架构和特点、Android Market...
简介 android app 服务器地址设置工具apk(android)主要功能:在开发环境中修改,新增,切换 连接的服务器的地址。 该工具简单易用,从而告别之前客户端切换服务端地址的繁琐操作,新工具切换服务器地址只需点击...