public class MyProvider extends ContentProvider{
@Override
public boolean OnCreate(){
/*
初始化内容提供器时调用,一般在这里完成数据库的创建与升级等操作
(只在有调用ContentResolver尝试访问app中的数据时,才会被初始化)
*/
return false;//返回true代表初始化成功,false则为失败
}
@Override
public Cursor query(Uri uri,String[] projection,String selection,
String[] selectionArgs,String sortOrder){
/*
调用该方法从内容提供器中查询数据,uri参数用作确定查询的表
projection参数用于确定查询的列,selection,selectionArgs是查询的条件
sortOrder是对结果进行排序
查询结果存放在Cursor对象中返回
*/
return null;
}
@Override
public Uri insert(Uri uri,ContentValues values){
/*
想内容提供器中插入一条数据
uri:确定插入的表
values:插入的数据
添加成功后会返回表示该条新数据的uri
*/
return null;
}
@Override
public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){
/*
更新数据时调用该方法
uri:同理
values:新的数据
selection、selectionArgs:更新的条件
返回更新了的行数
*/
return 0;
}
@Override
public int delete(Uri uri,String selection,String[] selectionArgs){
/*
删除数据时调用
uri:同理
selection、selectionArgs:同理
返回被删除的行数
*/
return 0;
}
@Override
public String getType(Uri uri){
/*
调用该方法,是根据传入的uri返回相应的MIME类型
*/
return null;
}
}
content://com.example.app.provider/table/id
表示的是调用com.example.app应用中table表的数据,id为查询表中 id为此值的数据(不传入此值,则代表查询全表)
若想查询匹配任意表的内容,则可将table改为 *,如:
content://com.example.app.prodiver/*
若想查询具体表中的某一行,即可将id替换为#,如:
content://com.eaxmple.app.provider/table/#
public class MyProvider extends ContentProvider{
public static final int TABLE1_DIR = 0;
public static final int TABLE1_ITEM = 1;
public static final int TABLE2_DIR = 2;
public static final int TABLE1_ITEM = 3;
private static UriMatcher uriMatcher;
static{
uriMatcher = new UriMatcher(Uri.Matcher.NO_MATCH);
//第一个参数为authority(一般为应用包名.provider)
//第二个参数为path,即查询的表
//第三个参数为自定义码
uriMatcher.addUri("com.example.app.provider","table1",TABLE1_DIR);
uriMatcher.addUri("com.example.app.provider","table1/#",TABLE1_ITEM);
uriMatcher.addUri("com.example.app.provider","table2",TABLE2_DIR);
uriMatcher.addUri("com.example.app.provider","table2/#",TABLE2_ITEM);
}
@Override
public boolean OnCreate(){
/*
初始化内容提供器时调用,一般在这里完成数据库的创建与升级等操作
(只在有调用ContentResolver尝试访问app中的数据时,才会被初始化)
*/
return false;//返回true代表初始化成功,false则为失败
}
@Override
public Cursor query(Uri uri,String[] projection,String selection,
String[] selectionArgs,String sortOrder){
/*
调用该方法从内容提供器中查询数据,uri参数用作确定查询的表
projection参数用于确定查询的列,selection,selectionArgs是查询的条件
sortOrder是对结果进行排序
查询结果存放在Cursor对象中返回
*/
//其他方法中也类似,调用uriMatcher匹配查询的位置
switch(uriMatcher.match(uri)){
case TABLE1_DIR:
//查询该表的全部数据
break;
case TABLE1_ITEM:
//查询该表下的某条数据
break;
case TABLE2_DIR:
//同理
break;
case TABLE1_ITEM:
//同理
break;
}
return null;
}
@Override
public Uri insert(Uri uri,ContentValues values){
/*
想内容提供器中插入一条数据
uri:确定插入的表
values:插入的数据
添加成功后会返回表示该条新数据的uri
*/
return null;
}
@Override
public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){
/*
更新数据时调用该方法
uri:同理
values:新的数据
selection、selectionArgs:更新的条件
返回更新了的行数
*/
return 0;
}
@Override
public int delete(Uri uri,String selection,String[] selectionArgs){
/*
删除数据时调用
uri:同理
selection、selectionArgs:同理
返回被删除的行数
*/
return 0;
}
@Override
public String getType(Uri uri){
/*
调用该方法,是根据传入的uri返回相应的MIME类型
MIME字符串主要由3部分组成:
1.vnd开头
2.如果URI以路径结尾,则后接android.cursor.dir/,
若以id结尾,则接android.cursor.item/
3.最后街上vnd.<authority>.<path>
如下:
*/
switch(uriMatcher.match(uri)){
case TABLE1_DIR:
//以路径结尾
return "vnd.android.cursor.dir/vnd.com.example.app.provider.table1";
break;
case TABLE1_ITEM:
//以id结尾
return "vnd.android.cursor.item/vnd.com.example.app.provider.table1";
break;
case TABLE2_DIR:
//同理
return "vnd.android.cursor.dir/vnd.com.example.app.provider.table2";
break;
case TABLE1_ITEM:
//同理
return "vnd.android.cursor.item/vnd.com.example.app.provider.table1";
break;
}
return null;
}
}
public class MyProvider extends ContentProvider{
public static final int TABLE1_DIR = 0;
public static final int TABLE1_ITEM = 1;
public static final int TABLE2_DIR = 2;
public static final int TABLE1_ITEM = 3;
//实现数据库的帮助类
private MyDatabaseHelper dbHelper;
private static UriMatcher uriMatcher;
static{
uriMatcher = new UriMatcher(Uri.Matcher.NO_MATCH);
//第一个参数为authority(一般为应用包名.provider)
//第二个参数为path,即查询的表
//第三个参数为自定义码
uriMatcher.addUri("com.example.app.provider","table1",TABLE1_DIR);
uriMatcher.addUri("com.example.app.provider","table1/#",TABLE1_ITEM);
uriMatcher.addUri("com.example.app.provider","table2",TABLE2_DIR);
uriMatcher.addUri("com.example.app.provider","table2/#",TABLE2_ITEM);
}
@Override
public boolean OnCreate(){
//创建或更新数据库
dbHelper = new MyDatabaseHelper(context,"dbName.db",null,1);
return false;//返回true代表初始化成功,false则为失败
}
@Override
public Cursor query(Uri uri,String[] projection,String selection,
String[] selectionArgs,String sortOrder){
//查询数据库
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = null;
switch(uriMatcher.match(uri)){
case TABLE1_DIR:
curos = db.query("tableName",projection,selection,selectionArgs,
null,null,sortOrder);
//查询该表的全部数据
break;
case TABLE1_ITEM:
//获取查询的id值
String id = uri.getPathSegments().get(1);
curos = db.query("tableName",projection,"id = ?",new String[]{id},
null,null,sortOrder);
//查询该表下的某条数据
break;
case TABLE2_DIR:
//类上
break;
case TABLE1_ITEM:
//类上
break;
}
return cursor;
}
//插入操作与查询操作类似
@Override
public Uri insert(Uri uri,ContentValues values){
/*
想内容提供器中插入一条数据
uri:确定插入的表
values:插入的数据
添加成功后会返回表示该条新数据的uri
*/
return null;
}
//更新操作与查询操作类似
@Override
public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){
/*
更新数据时调用该方法
uri:同理
values:新的数据
selection、selectionArgs:更新的条件
返回更新了的行数
*/
return 0;
}
//与查询操作类似
@Override
public int delete(Uri uri,String selection,String[] selectionArgs){
/*
删除数据时调用
uri:同理
selection、selectionArgs:同理
返回被删除的行数
*/
return 0;
}
@Override
public String getType(Uri uri){
/*
调用该方法,是根据传入的uri返回相应的MIME类型
MIME字符串主要由3部分组成:
1.vnd开头
2.如果URI以路径结尾,则后接android.cursor.dir/,
若以id结尾,则接android.cursor.item/
3.最后街上vnd.<authority>.<path>
如下:
*/
switch(uriMatcher.match(uri)){
case TABLE1_DIR:
//以路径结尾
return "vnd.android.cursor.dir/vnd.com.example.app.provider.table1";
break;
case TABLE1_ITEM:
//以id结尾
return "vnd.android.cursor.item/vnd.com.example.app.provider.table1";
break;
case TABLE2_DIR:
//同理
return "vnd.android.cursor.dir/vnd.com.example.app.provider.table2";
break;
case TABLE1_ITEM:
//同理
return "vnd.android.cursor.item/vnd.com.example.app.provider.table1";
break;
}
return null;
}
}
Uri uri = Uri.pare("content://com.eaxmple.app.provider/table");
//然后,利用该uri查询数据
Cursor curso =context.getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);
//各参数与contentProvider中一样
//update(),insert(),delete()方法与数据库中的类似
然后,通过移动游标的位置遍历Cursor的所有行,取出数据。
if(cursor != null){
while(cursor.moveToNext()){
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
...
}
//使用完关闭释放
cursor.close();
}