在android 中,我们们常常会使用到内部数据库,同时又希望自己的部分数据可以被其他应用程序访问到,我们可以通过自定义内容提供者来实现这个功能。想访问到contentProvider,提供的数据需要两个条件一是 程序的uri,二是获得contentResolver 对象,getContentResolver()所调用的方法其实是调用的 contentProvider 内部实现的方法 。
/**
* Description: 把当前应用下的私有数据库 提供给外界<br/>
* Copyright (c) , 2016, Jansonxu <br/>
* This program is protected by copyright laws. <br/>
* Program Name:UserContentProvider.java <br/>
* Date: 2016年3月9日
*
* @author 李阳
* @version : 1.0
*/
package com.example.contentprovider.provider;
import com.example.contentprovider.util.Dbhelper;
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 UserContentProvider extends ContentProvider {
public static final String AUTHORITY = "com.example.contentprovider.user_1";
public static final int CODE_USER = 1;
public static final int CODE_ORDER = 2;
public static UriMatcher uriMatcher;
static{
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY, "user", CODE_USER);
uriMatcher.addURI(AUTHORITY, "order", CODE_ORDER);
}
private Dbhelper dbHelper;
@Override
public boolean onCreate() {
dbHelper = new Dbhelper(getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
int code = uriMatcher.match(uri);
Cursor cursor = null;
SQLiteDatabase db = dbHelper.getReadableDatabase();
switch (code) {
case CODE_USER:
cursor = db.query("t_user", projection, selection, selectionArgs, null, null, sortOrder);
break;
case CODE_ORDER:
break;
default:
break;
}
return cursor;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
if(uriMatcher.match(uri)==UserContentProvider.CODE_USER){
long id = db.insert("t_user", null, values);
return ContentUris.withAppendedId(uri, id);
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
int num = 0;
if(uriMatcher.match(uri)==UserContentProvider.CODE_USER){
num = db.delete("t_user", selection, selectionArgs);
}
return num;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
if(uriMatcher.match(uri)==UserContentProvider.CODE_USER){
db.update("t_user", values, selection, selectionArgs);
}
return 0;
}
}