1.提供的程序在清单文件application中配置
<provider
android:name="cn.itcast.db.provider.PersonProvider"
android:authorities="cn.itcast.db.personprovider"//定义主机名
></provider>
2.提供者的类继承ContentProvider
public class PersonProvider extends ContentProvider {
//创建了一个路径的识别器
uriMatcher默认的返回值,如果没有找到匹配的类型 返回-1
public static final UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);
public static final int ALL_PERSONS=1;
public static final int PERSON=2;
public static final int HAHA=3;
private static final String TAG="PersonProvider";
static{
// 主机名路径
matcher.addURI("cn.itcast.db.personprovider","persons", ALL_PERSONS);
//指定一个路径的匹配规则
//如果路径满足content://cn.itcast.db.personprovider/persons 返回值就是 1(ALL_PERSONS)
matcher.addURI("cn.itcast.db.personprovider", "person/#", PERSON);
//如果路径满足content://cn.itcast.db.personprovider/person/10 返回值就是 (PERSON) 2
matcher.addURI("cn.itcast.db.personprovider", "haha", HAHA);
}
/**
* personProvder内容提供者第一次被创建的时候调用的方法
*/
public boolean onCreate() {
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
int result= matcher.match(uri);
switch(result){
case ALL_PERSONS:
PersonDBDao dao=new PersonDBDao(getContext());
return dao.findAllbyCursor();
//content://cn.itcast.db.personprovider/person/10
case PERSON:
long id=ContentUris.parseId(uri);
MyDBOpenHelper openHelper=new MyDBOpenHelper(getContext());
SQLiteDatabase db=openHelper.getReadableDatabase();
if(db.isOpen()){
Cursor cursor=db.query("person", null, "personid=?", new String[]{id+""}, null, null, null);
return cursor;
}
case HAHA:
Log.i(TAG,"我是haha对应的路径");
default:
throw new IllegalArgumentException("uri 不能被识别");
}
}
3.接受者
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
Uri uri = Uri.parse("content://cn.itcast.db.personprovider/person/10");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
System.out.println("姓名" + name + "年龄" + age);
}
}