四大元件之一ContentProvider
阿新 • • 發佈:2018-12-13
內容提供者:提供資料給別的程式的訪問介面 內容解析者:通過內容提供器來讀取或操作對應程式的資料
內容提供者步驟: 新建一個類繼承ContentProvider建立一個內容提供器,實現他裡面的方法 或者在包下面new–Other–Content Provider建立
建立一個靜態程式碼塊,建立UriMatcher路徑匹配器, 並呼叫addURI()方法去新增匹配規則 一個完整的uri是 content://com.example.aap.provider/query uri是由authority和path組成的 第三個引數是一個匹配碼
static { //建立UriMatcher路徑匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //呼叫addURI()方法去新增匹配規則 uriMatcher.addURI("com.example.mycontent.provider", "query", QUERYTABLE); uriMatcher.addURI("com.example.mycontent.provider", "insert", INSERTTABLE); uriMatcher.addURI("com.example.mycontent.provider", "delete", DELETETABLE); uriMatcher.addURI("com.example.mycontent.provider", "update", UPDATETABLE); }
初始化內容提供器,在這個方法對資料庫的建立和升級的呼叫
//
@Override
public boolean onCreate() {
myDatabase = new MyDatabase(getContext());
db = myDatabase.getReadableDatabase();
return true;
}
由於是提供資料給別的程式的訪問介面使用,所以直接返回
新增資料
@Override public Uri insert(Uri uri, ContentValues values) { int code = uriMatcher.match(uri); //判斷傳過來的uri是否與匹配碼對應 if (code == INSERTTABLE) { long insert = db.insert("meno", null, values); Uri uri1 = Uri.parse(String.valueOf(insert)); //返回值代表新新增資料的id return uri1; } else { throw new UnsupportedOperationException("路徑不匹配"); } }
更新資料
@Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int code = uriMatcher.match(uri); if (code == UPDATETABLE) { int update = db.update("meno", values, selection, selectionArgs); //返回值代表影響的行數 return update; } throw new UnsupportedOperationException("路徑不匹配"); }
刪除資料
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int code = uriMatcher.match(uri);
if (code == DELETETABLE) {
int delete = db.delete("meno", selection, selectionArgs);
//返回值代表被刪除的行數
return delete;
}
throw new UnsupportedOperationException("路徑不匹配");
}
查詢資料
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
int code = uriMatcher.match(uri);
if (code == QUERYTABLE) {
//路徑匹配成功
Cursor cursor = db.query("meno", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
} else {
throw new UnsupportedOperationException("路徑不匹配");
}
}
內容解析者
內容解析者新增
Uri uri1 = Uri.parse("content://com.example.mycontent.provider/insert");
ContentValues values = new ContentValues();
values.put("name","狐狸");
values.put("age",21);
Uri insert = getContentResolver().insert(uri1, values);
Toast.makeText(this,"添加了"+insert+"行",Toast.LENGTH_SHORT).show();
內容解析者更新
Uri uri2 = Uri.parse("content://com.example.mycontent.provider/update");
ContentValues values1 = new ContentValues();
values1.put("name","熊貓");
int update = getContentResolver().update(uri2, values1, "name=?", new String[]{"狐狸"});
Toast.makeText(this,"更新了"+update+"行",Toast.LENGTH_SHORT).show();
內容解析者刪除
Uri uri3 = Uri.parse("content://com.example.mycontent.provider/delete");
int delete = getContentResolver().delete(uri3,null,null);
Toast.makeText(this,"刪除了"+delete+"行",Toast.LENGTH_SHORT).show();
內容解析者查詢
Uri uri4 = Uri.parse("content://com.example.mycontent.provider/query");
Cursor cursor = getContentResolver().query(uri4, null, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String name = cursor.getString(1);
int age = cursor.getInt(2);
Toast.makeText(this,name+age,Toast.LENGTH_SHORT).show();
}
}