1、定義一個 CONTENT_URI 常量。
2、定義一個類 繼承ContentProvider 。
3、實現 query,update,insert,delete,getType 和onCreate放法。
4、在AndroidManifest.xml 中聲明
在application 標籤中加入:
<provider android:name="com.sslinm.FirstContentProvider"
android:authorities="com.sslinm.FirstContentProvider"/>
爲了數據的通用性
在provicer當中,根據uri 來判斷,這個uri請求應該進行怎樣的處理:(以query 方法爲例)
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
System.out.println(" in the query method ");
SQLiteQueryBuilder sqlB = new SQLiteQueryBuilder();
// 條件過濾判斷,符合那個uri條件進入那個分支
int match = uriMatcher.match(uri);
System.out.println(match+" is match");
switch(match){
case INCOMING_USER_COLLECTION :
sqlB.setTables(UserTableMetaData.TABLE_NAME);
sqlB.setProjectionMap(userProjectMap);
break;
case INCOMING_USER_SINGLE :
sqlB.setTables(UserTableMetaData.TABLE_NAME);
sqlB.setProjectionMap(userProjectMap);
// 單個查詢的條件
sqlB.appendWhere(UserTableMetaData._ID+"="+uri.getPathSegments().get(1));
break;
default:throw new RuntimeException(" no match uri !!");
}
// 判斷orderBy字句
String orderBy;
if(TextUtils.isEmpty(sortOrder)){
orderBy = UserTableMetaData.DEFAULT_SORT_ORDER;
}else{
orderBy = sortOrder;
}
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = sqlB.query(db, projection, selection, selectionArgs, null, null, orderBy);
// 通知監聽
cursor.setNotificationUri(getContext().getContentResolver(), FirstProviderMetaData.UserTableMetaData.CONTENT_URI);
return cursor;
}
在activity 裏面通過getContentResolver() 就可以得到一個 包含provider 調用的對象,然後調用provider中對應的方法 像什麼insert,query等等