传播智客学习笔记--L20 Content Provider

创建Content Provider类,注册Manifest

Content Provider 和Activity是四大主要控件,之间有很多相似,同样都放在项目包或者子包下。

必须进行URI匹配,确定合法的URI输入

    /**
     * 使用UriMatcher类 进行URI匹配
     * UriMatcher.NO_MATCH 指的是不匹配时对应的code
     * PERSONS 和 PERSON 是 合法的URI 对应的code
     */
    private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
    private static final int PERSONS = 1;
    private static final int PERSON = 2;
    static{
        MATCHER.addURI("com.njulya.providers.personprovider", "person", PERSONS);
        MATCHER.addURI("com.njulya.providers.personprovider", "person/#", PERSON);
    }

自定义对应的方法

    /**
     * 重写insert方法
     * 两个关于URI的类 Uri 和 ContentUris 
     * 对应的方法 uri.parse("uri") 和 ContentUris.withAppendedId(uri, rowid);
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        SQLiteDatabase db = helper.getWritableDatabase();
        switch (MATCHER.match(uri)) {
        case PERSONS:
            long rowid = db.insert("person", null, values);
            Uri insertUri = ContentUris.withAppendedId(uri, rowid);
            return insertUri;
        default:
            throw new IllegalArgumentException("URI is Unkown");
        }
    
    }

删除delete方法

    /**
     * 重写delete方法
     * 关键是如何通过 URI 和 外部提供的 seletion条件 确定删除的参数
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        SQLiteDatabase db = helper.getWritableDatabase();
        switch (MATCHER.match(uri)) {
        case PERSONS:
            return db.delete("person", selection, selectionArgs);
        case PERSON:
            long rowid = ContentUris.parseId(uri);
            String where = "_id="+rowid;//内部解析的条件
            if(selection != null && !"".equals(selection))//外面的条件不是null,且不为空
                where += "and" + selection;//加上外面的条件
            return  db.delete("person", where, selectionArgs);
        default:
            throw new IllegalArgumentException("URI is Unkown");
        }
    }

 

posted @ 2015-01-13 14:28  lya_nju  阅读(172)  评论(0)    收藏  举报