内容解析器 ContentResolver
注:本文主要摘自developer.android.google.cn/(现在开发者文档里面大多数都有中文版,而且不需要*)
如果有哪里错误,请务必指出,谢谢!
内容提供程序管理对*数据存储区的访问。提供程序是 Android 应用的一部分,通常提供自己的 UI 来使用数据。 但是,内容提供程序主要旨在供其他应用使用,这些应用使用提供程序客户端对象来访问提供程序。 提供程序与提供程序客户端共同提供一致的标准数据界面,该界面还可处理跨进程通信并保护数据访问的安全性。
内容提供器CRUD跟检索行数据(比如数据库存储方法Sqlite)相类似,所以不了解的可以先了解Sqlite。
第一步应该请求权限:
根据需求去manifest中<uses-permission>填写相关的权限
如下文的用户字典就应该申请: <uses-permission android:name="android.permission.READ_USER_DICTIONARY">
①查询用法query大致如下:
// Queries the user dictionary and returns results
mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI, // The content URI of the words table
mProjection, // The columns to return for each row
mSelectionClause // Selection criteria
mSelectionArgs, // Selection criteria
mSortOrder); // The sort order for the returned rows
许多提供程序都允许通过将 ID 值追加到 URI 末尾来访问表中的单个行。例如,要从用户字典中检索_ID
为4
的行,则可使用此内容
URI:
Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
还有一种方法是:
Uri uri = Uri.withAppendedPath(UserDictionary.Words.CONTENT_URI, "4");
本例子URI是用户字典,根据所需替换两个参数,注意withAppendedId是int,而Path的是String。
查询之后最好对cursor进行判断,
// 有时候会抛出异常或者是错误的cursor
if (null == mCursor) {
/*
* null的情况是错误的cursor 可能是错误的provider,所以此处最好是log.e
* 或者进行一些处理,但是一定不要继续调用mCursor,否则报错。
*/
} else if (mCursor.getCount() < 1) {
/*
* 这里可能原因是查询不到数据,可能是相关数据库里面没有,或者搜索词错误。
*/
} else {
// 查询成功
}
②插入、删除、更新
这几个都跟检索行数据方法差不多就不一一列出了。
ContentValues mNewValues = new ContentValues();
//然后把数据一一put
mNewValues.put(UserDictionary.Words.APP_ID, "example.user");
mNewUri = getContentResolver().insert(UserDictionary.Word.CONTENT_URI,mNewValues);
插入时如果您不想指定值,则可以使用 ContentValues.putNull() 将列设置为 null。代码段不会添加 _ID 列,因为系统会自动维护此列。
更新时如果您要清除列的内容,请将值设置为 null。
实用要点:
联系人提供程序中的 ContactsContract.Data 表会使用 MIME 类型来标记每行中存储的联系人数据类型。 要获取与内容 URI 对应的 MIME 类型,请调用 ContentResolver.getType()。
异步查询:平时在初始化加载数据时候(比如读取联系人信息),实际用途中请使用异步方法,官方推荐的类有CursorLoader类(有需要的可以自行了解)
上一篇: java基础:多态过程中的动态绑定
下一篇: 关于在List中遍历删除元素的问题的自省
推荐阅读
-
内容解析器 ContentResolver
-
Android组件——内容提供者ContentResolver
-
安卓学习 之 ContentResolver内容提供者(七)
-
ContentProvider内容提供者与ContentResolver内容访问者
-
android之ContentResolver内容访问者
-
ContentProvider内容提供者 和 ContentResolver内容解析者
-
ContentProvider,Uri,ContentResolver,UriMatcher详解
-
android之内容观察者ContentResolver
-
ContentProvider内容提供者和ContentResolver内容访问者
-
网站建设怎么做,网站建设基本内容