传播智客学习笔记--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"); } }

浙公网安备 33010602011771号