- package com.example.android_sqlite.provider;
- import com.example.android_sqlite.database.DatabaseHelper;
- 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 UserContentProviders extends ContentProvider {
- // 操作的标志
- private static final String AUTHORITIE = "www.csdn.com.provider.userContentProvider";
- // 定义uri解析返回的匹配码
- private static final int USERCODE = 1;
- private static final int USERSCODE = 2;
- private static UriMatcher uriMatcher;
- private String USERS_DIR = "vnd.android.cursor.dir/users";
- private String USERS_ITEM = "vnd.android.cursor.item/users";
- private DatabaseHelper dh;
- static {
- // 实例化UriMatcher对象
- uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
- // 匹配的结果码
- uriMatcher.addURI(AUTHORITIE, "users", USERSCODE);
- uriMatcher.addURI(AUTHORITIE, "users/#", USERCODE);
- }
- /**
- * 在UserContentProvider创建之后,就会被调用,当其他应用程序第一次访问contentPrivider时,
- * 该ContentProvider就会被创建出来
- */
- @Override public boolean onCreate() {
- dh = new DatabaseHelper(getContext());
- return false;
- }
- /**
- * URL:http://www.baidu.com/index.html http://: http协议访问网站
- * www.baidu.com:域名部分 /index.html:网站资源
- *
- * URI:content://www.csdn.com.provider.userContentProvider/user
- * content://android的ContentProvider的规定
- * www.csdn.com.provider.userContentProvider:文件汇中自己配置的authorities
- * user:资源部分(数据部分)当访问者需要访问不同的资源时,这个部分是动态改变.这个部分可以自己定义
- *
- * UriMatcher:匹配uri
- */
- /**
- * 查询方法
- */
- @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
- SQLiteDatabase db = dh.getWritableDatabase();
- Cursor c = null;
- switch ((uriMatcher.match(uri))) {
- case USERCODE:
- // 一个条目
- long id = ContentUris.parseId(uri);
- c = db.query("users", projection, "userid=?", new String[] {
- id + ""
- },
- null, null, sortOrder);
- break;
- case USERSCODE:
- c = db.query("users", projection, selection, selectionArgs, null, null, sortOrder);
- break;
- default:
- throw new IllegalArgumentException("unknow URI" + uri);
- }
- return c;
- }
- /**
- * 返回操作的类型 如果操作多条记录那么MINE类型vnd.android.cursor.div/开头
- * 如果操作的数据只有一条记录那么MINE类型vnd.android.cursor.item/开头
- */
- @Override public String getType(Uri uri) {
- String value = null;
- switch (uriMatcher.match(uri)) {
- case USERCODE:
- value = USERS_ITEM;
- break;
- case USERSCODE:
- value = USERS_DIR;
- break;
- }
- return null;
- }
- /**
- * 插入操作
- */
- @Override public Uri insert(Uri uri, ContentValues values) {
- if (uriMatcher.match(uri) != USERSCODE) {
- throw new IllegalArgumentException("unknow URI" + uri);
- }
- SQLiteDatabase db = dh.getReadableDatabase();
- long rowId = db.insert("users", "username", values);
- // 监听数据变化,通知注册在uri上的监听者
- // 参数1:注册的uri,参数2:监听者
- getContext().getContentResolver().notifyChange(uri, null);
- return ContentUris.withAppendedId(uri, rowId);
- }
- /**
- * 更新操作
- */
- @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- SQLiteDatabase db = dh.getWritableDatabase();
- int rows = -1;
- switch ((uriMatcher.match(uri))) {
- case USERCODE:
- // 一个条目
- long id = ContentUris.parseId(uri);
- rows = db.update("users", values, "userid=?", new String[] {
- id + ""
- });
- db.close();
- break;
- case USERSCODE:
- rows = db.update("users", values, selection, selectionArgs);
- break;
- default:
- throw new IllegalArgumentException("unknow URI" + uri);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return rows;
- }
- /**
- * 删除操作
- */
- @Override public int delete(Uri uri, String selection, String[] selectionArgs) {
- SQLiteDatabase db = dh.getWritableDatabase();
- int rows = -1;
- switch ((uriMatcher.match(uri))) {
- case USERCODE:
- // 一个条目
- long id = ContentUris.parseId(uri);
- rows = db.delete("users", "userid=?", new String[] {
- id + ""
- });
- db.close();
- break;
- case USERSCODE:
- rows = db.delete("users", selection, selectionArgs);
- break;
- default:
- throw new IllegalArgumentException("unknow URI" + uri);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return rows;
- }
- }
来源: http://lib.csdn.net/snippet/android/49122