**PersonContentProvider类:**public class PersonContentProvider extends ContentProvider {    private static final String AUTHORITY = "com.itheima.sqlitedemo.providers.PersonContentProvider";//authority:权威,权利    private static final int PRESON_INSERT_CODE = 0;    // 操作person表添加的操作的uri匹配码,插入码    private static final int PERSON_DELETE_CODE = 1;    // 删除码    private static final int PERSON_UPDATE_CODE = 2;    // 更新码    private static final int PERSON_QUERY_ALL_CODE = 3; // 查询所有码    private static final int PERSON_QUERY_ITEM_CODE = 4;// 查询单个条目的码    private static UriMatcher uriMatcher;//uri匹配者    private PersonSQLiteOpenHelper mOpenHelper;     // person表的数据库帮助对象    static {//当类加载的时候就去执行静态代码块中的内容,类加载的时候也可以把想让执行的程序放在里面。        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);        // 添加一些uri(分机号)        // content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/insert        uriMatcher.addURI(AUTHORITY, "person/insert", PRESON_INSERT_CODE);        // content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/delete        uriMatcher.addURI(AUTHORITY, "person/delete", PERSON_DELETE_CODE);        // content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/update        uriMatcher.addURI(AUTHORITY, "person/update", PERSON_UPDATE_CODE);        // content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/queryAll        uriMatcher.addURI(AUTHORITY, "person/queryAll", PERSON_QUERY_ALL_CODE);        // content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/query/#        uriMatcher.addURI(AUTHORITY, "person/query/#", PERSON_QUERY_ITEM_CODE);    }    @Override    public boolean onCreate() {        mOpenHelper = new PersonSQLiteOpenHelper(getContext());        return true;    }    //查询方法,返回的是游标结果集    @Override    public Cursor query(Uri uri, String[] projection, String selection,            String[] selectionArgs, String sortOrder) {        SQLiteDatabase db = mOpenHelper.getReadableDatabase();        switch (uriMatcher.match(uri)) {//匹配码        case PERSON_QUERY_ALL_CODE:  // 查询所有人的uri            if(db.isOpen()) {                Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);                return cursor;                // db.close(); 返回cursor结果集时, 不可以关闭数据库            }            break;        case PERSON_QUERY_ITEM_CODE:        // 查询的是单条数据, uri末尾出有一个id            if(db.isOpen()) {                long id = ContentUris.parseId(uri);//得到uri末尾的一个id。                Cursor cursor = db.query("person", projection, "_id = ?", new String[]{id + ""}, null, null, sortOrder);                return cursor;            }            break;        default:            throw new IllegalArgumentException("uri不匹配: " + uri);//抛出非法参数异常        }        return null;    }    //返回MIME-type:    @Override    public String getType(Uri uri) {        switch (uriMatcher.match(uri)) {        case PERSON_QUERY_ALL_CODE: // 返回多条的MIME-type            return "vnd.android.cursor.dir/person";        case PERSON_QUERY_ITEM_CODE: // 返回单条的MIME-TYPE            return "vnd.android.cursor.item/person";        default:            break;        }        return null;    }    @Override    public Uri insert(Uri uri, ContentValues values) {        switch (uriMatcher.match(uri)) {        case PRESON_INSERT_CODE:    // 添加人到person表中            SQLiteDatabase db = mOpenHelper.getWritableDatabase();            if(db.isOpen()) {                long id = db.insert("person", null, values);                db.close();                return ContentUris.withAppendedId(uri, id);            }            break;        default:            throw new IllegalArgumentException("uri不匹配: " + uri);        }        return null;    }    @Override    public int delete(Uri uri, String selection, String[] selectionArgs) {        switch (uriMatcher.match(uri)) {        case PERSON_DELETE_CODE:    // 在person表中删除数据的操作            SQLiteDatabase db = mOpenHelper.getWritableDatabase();            if(db.isOpen()) {                int count = db.delete("person", selection, selectionArgs);                db.close();                return count;            }            break;        default:            throw new IllegalArgumentException("uri不匹配: " + uri);        }        return 0;    }    @Override    public int update(Uri uri, ContentValues values, String selection,            String[] selectionArgs) {        switch (uriMatcher.match(uri)) {        case PERSON_UPDATE_CODE: // 更新person表的操作            SQLiteDatabase db = mOpenHelper.getWritableDatabase();            if(db.isOpen()) {                int count = db.update("person", values, selection, selectionArgs);                db.close();                return count;            }            break;        default:            throw new IllegalArgumentException("uri不匹配: " + uri);        }        return 0;    }**利用内容提供者:**public class TextCase extends AndroidTestCase {    private static final String TAG = "TextCase";    public void testInsert() {        Uri uri = Uri.parse("content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/insert");        // 内容提供者访问对象(内容解析器)resolver:解析器        ContentResolver resolver = getContext().getContentResolver();        ContentValues values = new ContentValues();        values.put("name", "fengjie");        values.put("age", 90);        uri = resolver.insert(uri, values);        Log.i(TAG, "uri: " + uri);        long id = ContentUris.parseId(uri);        Log.i(TAG, "添加到: " + id);    }    public void testDelete() {        Uri uri = Uri.parse("content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/delete");        // 内容提供者访问对象        ContentResolver resolver = getContext().getContentResolver();        String where = "_id = ?";        String[] selectionArgs = {"21"};        int count = resolver.delete(uri, where, selectionArgs);        Log.i(TAG, "删除行: " + count);    }    public void testUpdate() {        Uri uri = Uri.parse("content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/update");        // 内容提供者访问对象        ContentResolver resolver = getContext().getContentResolver();        ContentValues values = new ContentValues();        values.put("name", "lisi");        int count = resolver.update(uri, values, "_id = ?", new String[]{"20"});        Log.i(TAG, "更新行: " + count);    }    public void testQueryAll() {        Uri uri = Uri.parse("content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/queryAll");        // 内容提供者访问对象        ContentResolver resolver = getContext().getContentResolver();        Cursor cursor = resolver.query(uri, new String[]{"_id", "name", "age"}, null, null, "_id desc");        if(cursor != null && cursor.getCount() > 0) {            int id;            String name;            int age;            while(cursor.moveToNext()) {                id = cursor.getInt(0);                name = cursor.getString(1);                age = cursor.getInt(2);                Log.i(TAG, "id: " + id + ", name: " + name + ", age: " + age);            }            cursor.close();        }    }    public void testQuerySingleItem() {        Uri uri = Uri.parse("content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/query/#");        // 在uri的末尾添加一个id content://com.itheima.sqlitedemo.providers.PersonContentProvider/person/query/20        uri = ContentUris.withAppendedId(uri, 20);        // 内容提供者访问对象        ContentResolver resolver = getContext().getContentResolver();        Cursor cursor = resolver.query(uri, new String[]{"_id", "name", "age"}, null, null, null);        if(cursor != null && cursor.moveToFirst()) {            int id = cursor.getInt(0);            String name = cursor.getString(1);            int age = cursor.getInt(2);            cursor.close();            Log.i(TAG, "id: " + id + ", name: " + name + ", age: " + age);        }    }

更多相关文章

  1. 使用ExpandableListActivity实现可展开的Activity
  2. Volley的四大请求
  3. 从TikTok事件,聊聊如何用内容煽动情绪
  4. Android(安卓)Parcelable接口使用方法详解
  5. android,webview增加自定义JS对象,调用过程追踪。
  6. android存储对象到本地
  7. Android手机定位案例代码
  8. android之Handler控制进度条
  9. Android(安卓)DES加密解密算法

随机推荐

  1. android 常用控件的使用 TextView EditTe
  2. UE4 安卓打包纹理格式选择
  3. Android(安卓)技术专题系列之三 -- 编译(bui
  4. Android中Notification的framework层讲解
  5. [译] 在 Android(安卓)使用协程(part III
  6. android之layout_weight体验(实现按比例
  7. android 开发环境搭建
  8. Android(安卓)之 ContentProvider的简介-
  9. Android面试系列文章2018之Android部分Ha
  10. Android(安卓)个别手机导航键覆盖布局解