Android系统是所有应用共享一个ContentResolver实例,还是每个应用各有一个?
解析Android中ContentResolver与Content URI的核心代码
Hey there! 我刚在Udacity的Android课程里看到这段示例代码,正好能帮你拆解里面的核心概念,咱们一步步来:
课程里的示例代码:
ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(DroidTermsExampleContract.CONTENT_URI, null, null, null, null);
这段代码是Android中访问Content Provider的标准写法,完全能正确访问目标内容提供器并获取数据。下面逐个解析里面的关键概念:
1. ContentResolver:数据交互的「中介」
- 这是Android系统提供的统一入口,用来和设备上各种Content Provider打交道。你不需要直接创建Content Provider的实例(系统会统一管理它们的生命周期),只需要通过ContentResolver发送请求,它会帮你找到对应的Provider并完成数据的读写操作。
- 调用
getContentResolver()就能拿到当前上下文的ContentResolver实例,这是Activity、Service等Context子类自带的方法,用起来非常方便。
2. Content URI:Content Provider的「唯一地址」
- 代码里的
DroidTermsExampleContract.CONTENT_URI是一个Uri对象,它就像是Content Provider的专属地址,让ContentResolver能精准定位到要访问的数据源。 - 通常URI格式是
content://<authority>/<path>,其中authority是你在Manifest注册Content Provider时指定的唯一标识(比如com.example.myapp.provider),用来避免和其他应用的Provider冲突。
3. query()方法:从Provider中查询数据
resolver.query()是查询Content Provider数据的核心方法,五个参数分别对应不同的查询规则:- 第一个参数:目标Content Provider的URI(也就是咱们说的「地址」)
- 第二个参数:指定要返回的列(传
null就返回所有列) - 第三个参数:查询过滤条件(类似SQL的
WHERE子句) - 第四个参数:过滤条件的占位符参数(用来替换第三个参数中的
?) - 第五个参数:结果排序规则(类似SQL的
ORDER BY)
- 方法返回的
Cursor就是查询到的结果集,你可以通过它遍历每一行数据,读取对应的字段值。
内容的提问来源于stack exchange,提问作者Vikas Prasad
相关产品推荐
相关产品推荐

