UriMatcher

public static final UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);
uriMatcher.addURI(Book.AUTHORITY, "item/#", Book.ITEM_ID);
}


这里UriMatcher类型的静态字段是用来匹配传入到ContentProvider中的Uri的类。其构造方法传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码可以为一个大于零的数表示匹配根路径或传入-1,即常量UriMatcher.NO_MATCH表示不匹配根路径。addURI()方法是用来增加其他URI匹配路径的,第一个参数传入标识ContentProvider的AUTHORITY字符串。第二个参数传入需要匹配的路径,[color=blue]这里的#代表匹配任意数字,另外还可以用*来匹配任意文本。[/color]第三个参数必须传入一个大于零的匹配码,用于match()方法对相匹配的URI返回相对应的匹配码。

例子:
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
System.out.println(" BookProvider getType...");
int code = uriMatcher.match(uri);
switch (code) {
case Book.ITEM:
System.out.println(" BookProvider getType..." +Book.CONTENT_TYPE);
return Book.CONTENT_TYPE;
case Book.ITEM_ID:
System.out.println(" BookProvider getType..." +Book.CONTENT_ITEM_TYPE);
return Book.CONTENT_ITEM_TYPE;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
package com.example.datarestore; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class DatabaseProvider extends ContentProvider { public static final int BOOK_ANY = 0; public static final int BOOK_ITEM = 1; private MyDatabaseHelper myDatabaseHelper; private static UriMatcher uriMatcher; static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI("com.example.datarestore.provider","Book",BOOK_ANY); uriMatcher.addURI("com.example.datarestore.provider","Book/#",BOOK_ITEM); } public DatabaseProvider() { } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = myDatabaseHelper.getWritableDatabase(); int deleteRow = 0; if(uriMatcher.match(uri) == BOOK_ANY){ deleteRow = db.delete("Book",selection,selectionArgs); } else if (uriMatcher.match(uri) == BOOK_ITEM) { String Id = uri.getPathSegments().get(1); deleteRow = db.delete("Book","id = ?",new String[]{Id}); } return deleteRow; } @Override public String getType(Uri uri) { SQLiteDatabase db = myDatabaseHelper.getWritableDatabase(); String type = ""; if(uriMatcher.match(uri) == BOOK_ANY){ type = "vnd.android.cursor.dir/vnd.com.example.datarestore.provider.Book"; } else if (uriMatcher.match(uri) == BOOK_ITEM) { String Id = uri.getPathSegments().get(1); type = "vnd.android.cursor.item/vnd.com.example.datarestore.provider.Book"; } return type; } @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = myDatabaseHelper.getWritableDatabase(); long newId = db.insert("Book",null,values); Uri returnuri = Uri.parse("content://com.example.datarestore.provider/Book/"+newId); return returnuri; } @Override public boolean onCreate() { myDatabaseHelper = new MyDatabaseHelper(getContext(),"Bookstore.db",null,1); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = myDatabaseHelper.getWritableDatabase(); Cursor cursor = null; if(uriMatcher.match(uri) == BOOK_ANY){ cursor = db.query("Book",projection,selection,selectionArgs,null,null,sortOrder); } else if (uriMatcher.match(uri) == BOOK_ITEM) { String Id = uri.getPathSegments().get(1); cursor = db.query("Book",projection,"id = ?",new String []{Id},null,null,sortOrder); } return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = myDatabaseHelper.getWritableDatabase(); int updateRow = 0; if(uriMatcher.match(uri) == BOOK_ANY){ updateRow = db.update("Book",values,selection,selectionArgs); } else if (uriMatcher.match(uri) == BOOK_ITEM) { String Id = uri.getPathSegments().get(1); updateRow = db.update("Book",values,"id = ?",new String[]{Id}); } return updateRow; } }代码有什么问题,为什么显示 Process: com.example.providertest, PID: 25182 java.lang.IllegalArgumentException: Unknown URL content://com.example.datarestore.provider/Book
最新发布
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值