在Android中我们有时需要操作一些我们可能没有权限去操作的内容,这时候就需要一个内容提供者为我们提供一个接口,通过此接口我们就可以对我们想操作的数据进行操作(此处是对数据库的操作其他的不知道还有没有这样的情况)。
在创建内容提供者的时候我们需要建立一个自己的类 他继承contentprovider类 实现它的方法 这就是创建了一个内容提供者。例:
public class PersonDbProvider extends ContentProvider { //uri匹配 private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); private static final int INSERT = 1; private static final int DELETE = 2; private static final int UPDATE = 3; private static final int QUERY = 4; private PersonSqliteOpenHelper helper ; //添加一组匹配规则 static{ matcher.addURI("com.jit.db.personprovider", "insert", INSERT); matcher.addURI("com.jit.db.personprovider", "delete", DELETE); matcher.addURI("com.jit.db.personprovider", "update", UPDATE); matcher.addURI("com.jit.db.personprovider", "query", QUERY); } // 路径为 content://com.jit.db.personprovider/insert 添加路径 // 路径为 content://com.jit.db.personprovider/delete 删除路径 // 路径为 content://com.jit.db.personprovider/update 更新路径 // 路径为 content://com.jit.db.personprovider/query 查找路径 @Override public int delete(Uri arg0, String arg1, String[] arg2) { // TODO Auto-generated method stub return 0; } @Override public String getType(Uri arg0) { // TODO Auto-generated method stub return null; } @Override public Uri insert(Uri arg0, ContentValues arg1) { // TODO Auto-generated method stub return null; } @Override public boolean onCreate() { // TODO Auto-generated method stub helper = new PersonSqliteOpenHelper(getContext()); return false; } @Override public Cursor query(Uri uri, String[] columns, String selection, String[] selectionArgs, String orderBy) { // TODO Auto-generated method stub SQLiteDatabase db = helper.getReadableDatabase(); if(matcher.match(uri) == QUERY){ Cursor cursor = db.query("person", columns, selection, selectionArgs, null, null, orderBy); return cursor; }else{ throw new IllegalArgumentException("路径匹配不正确"); } } @Override public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { // TODO Auto-generated method stub return 0; } }
第二步:在AndroidManifest.xml文件中添加内容提供者的标签:
<provider android:name="com.jit.db.PersonDbProvider" android:authorities="com.jit.db.personprovider"> </provider>
第三步:可以创建一个按钮的点击事件用来测试:
public void onclick(View v){ ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://com.jit.db.personprovider/query"); Cursor cursor = resolver.query(uri, null, null, null, null); while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); int id = cursor.getInt(cursor.getColumnIndex("id")); String number = cursor.getString(cursor.getColumnIndex("number")); System.out.println("name:"+name+" id:"+id+" number:"+number); } cursor.close(); }完结!