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.
126 lines
3.5 KiB
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类型...
|
|
}
|