Android四大组件之一ContentProvider 的使用
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher
//如果match()方法匹配content://cn.xxt.provider.personprovider/student路径,返回匹配码为1
第一个路径: sMatcher.addURI(“cn.xxt.provider.personprovider”, “person”, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配content://cn.xxt.provider.personprovider/student/#路径,返回匹配码为2
第二个路径: sMatcher.addURI(“cn.xxt.provider.personprovider”, “person/#”, 2);//#号为通配符
switch (sMatcher.match(Uri.parse("content://cn.xxt.provider.personprovider/person/10")))
{
}
注册完需要匹配的Uri后,就可以使用match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://cn.xxt.provider.personprovider/student路径,返回的匹配码为1,content://cn.xxt.provider.personprovider/student/# 路径 返回的匹配码为2,这样就完成了对UriMatcher 理解和使用。
示例代码:
private final static UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
private final static int STUDENT = 1;
private final static int STUDENTS = 2;
static
{
URI_MATCHER.addURI("com.example.loadermanagerdemo.StudentContentProvider", "student", STUDENTS);
URI_MATCHER.addURI("com.example.loadermanagerdemo.StudentContentProvider", "student/#", STUDENT);
}
ContentProvider的方法如何使用?
onCreate()初始化功能 比如:数据库的初始化。
getType(Uri uri) 获取匹配的类型 示例代码如下:
@Override
public String getType(Uri uri)
{
// 匹配路径的类型
int flag = URI_MATCHER.match(u ri);
switch (flag)
{
case STUDENT:
return "vnd.android.cursor.item/student";
case STUDENTS:
return "vnd.android.cursor.dir/students";
}
return null;
}
return 后面的一大串字符串在API中给出 如果是一个操作就返回
<span style="background-color: rgb(255, 255, 255);"><span style="color:#663300;"> "vnd.android.cursor.item/student",否则 返回</span></span><pre name="code" class="java" style="font-size: 16px; line-height: 24px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#663300;"> "vnd.android.cursor.dir/students"</span></span>
到达这里了 接下来只剩下对数据的一些基本操作:
在这里至贴出示例代码以及解释:
查询:
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
{
Cursor cursor = null;
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database=dbHelper.getWritableDatabase();
switch (flag)
{
case STUDENT:
long stuid = ContentUris.parseId(uri);
String where_value = "stuid = " + stuid;
if (selection!=null && !selection.equals(""))
{
where_value+=selection;
}
cursor=database.query("student", projection, where_value, selectionArgs, null, null, null);
break;
case STUDENTS:
cursor=database.query("student", projection, selection, selectionArgs, null, null, null);
break;
}
return cursor;
}
在这里使用到了数据库,在query(1,2,3...); 第一个参数为 一个数据库的表,selection为 选择的条件 selectionArgs为条件参数。
插入:
@Override
public Uri insert(Uri uri, ContentValues values)
{
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = dbHelper.getWritableDatabase();
Uri tempUri = null;
switch (flag)
{
case STUDENT:
break;
case STUDENTS:
// 返回插入成功后 返回的行数
long id = database.insert("student", null, values);
tempUri = ContentUris.withAppendedId(uri, id);
break;
}
// Log.i("TAG", "-->>"+tempUri.toString());
System.out.println("-->>" + tempUri.toString());
return tempUri;
}
删除:
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
// 影响数据库的
int count = 0;
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = dbHelper.getWritableDatabase();
switch (flag)
{
case STUDENT:
long stuid = ContentUris.parseId(uri);
String where_value = "stuid = " + stuid;
if (selection != null && !selection.equals(""))
{
where_value += selection;
}
count = database.delete("student", where_value, selectionArgs);
break;
case STUDENTS:
count = database.delete("student", selection, selectionArgs);
break;
}
return count;
}
更新:
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
{
int count = 0;
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = dbHelper.getWritableDatabase();
switch (flag)
{
case STUDENT:
long stuid = ContentUris.parseId(uri);
String where_value = "stuid = " + stuid;
if (selection != null && !selection.equals(""))
{
where_value += selection;
}
count = database.update("student", values, where_value, selectionArgs);
case STUDENTS:
count = database.update("student", values, selection, selectionArgs);
break;
}
return count;
}
以上才做,都要先用match()方法 匹配到匹配码,然后在进行选择性逻辑操作。这里的数据库为一个数据源,而ContentProvide将内容提供给我们。