You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1231233/src/data/NotesProvider.java

126 lines
3.5 KiB

java
Copy Code
/**
* 内容提供器初始化方法
* @return 初始化是否成功
*/
@Override
public boolean onCreate() {
// 获取数据库帮助类实例
mHelper = NotesDatabaseHelper.getInstance(getContext());
return true;
}
/**
* 查询方法实现
* @param uri 请求URI
* @param projection 查询列
* @param selection 查询条件
* @param selectionArgs 条件参数
* @param sortOrder 排序方式
* @return 查询结果游标
*/
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// 获取可读数据库实例
SQLiteDatabase db = mHelper.getReadableDatabase();
// 根据URI类型进行不同处理
switch (mMatcher.match(uri)) {
case URI_NOTE:
// 查询整个note表
return db.query(TABLE.NOTE, projection, selection, selectionArgs,
null, null, sortOrder);
case URI_NOTE_ITEM:
// 查询单条note记录
long id = ContentUris.parseId(uri);
String where = NoteColumns.ID + "=" + id;
if (!TextUtils.isEmpty(selection)) {
where += " AND (" + selection + ")";
}
return db.query(TABLE.NOTE, projection, where, selectionArgs,
null, null, sortOrder);
// 其他URI类型处理...
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
/**
* 插入方法实现
* @param uri 目标URI
* @param values 插入值
* @return 新记录的URI
*/
@Override
public Uri insert(Uri uri, ContentValues values) {
// 获取可写数据库实例
SQLiteDatabase db = mHelper.getWritableDatabase();
long dataId = 0, noteId = 0;
// 插入成功后返回的新URI
Uri newUri = null;
// 开启事务保证数据一致性
db.beginTransaction();
try {
// 根据URI类型处理不同表的插入
switch (mMatcher.match(uri)) {
case URI_NOTE:
// 插入note表记录
noteId = db.insert(TABLE.NOTE, null, values);
newUri = ContentUris.withAppendedId(uri, noteId);
break;
case URI_DATA:
// 插入data表记录
dataId = db.insert(TABLE.DATA, null, values);
newUri = ContentUris.withAppendedId(uri, dataId);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
// 通知数据变化
getContext().getContentResolver().notifyChange(uri, null);
return newUri;
}
/**
* 更新方法实现
* @param uri 目标URI
* @param values 更新值
* @param selection 更新条件
* @param selectionArgs 条件参数
* @return 受影响的行数
*/
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// 实现逻辑与query/insert类似...
}
/**
* 删除方法实现
* @param uri 目标URI
* @param selection 删除条件
* @param selectionArgs 条件参数
* @return 删除的行数
*/
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// 实现逻辑与query/insert类似...
}
/**
* 获取MIME类型
* @param uri 目标URI
* @return 对应的MIME类型字符串
*/
@Override
public String getType(Uri uri) {
// 根据URI返回对应的MIME类型...
}