来自第一行代码
内容提供器(Content Provider):用于在不同的应用程序之间实现数据共享的功能,使用内容提供器是 Android 实现跨程序共享数据的标准方式。
- 使用现有的内容提供器来读取和操作相应程序中
的数据 - 创建自己的内容提供器给我们程序的数据提供外部访问接口
当一个应用程序通过内容提供器对其数据提供了外部访问接口,任何其他的应用程序就都可以对这部分数据进行访问。
1、访问内容提供器中的数据需要借助ContentResolve 类,可以通过 Context 中的 getContentResolver()方法获取到该类的实例。
2、ContentResolver 中提供了一系列的方法用于对数据进行 CRUD 操作,insert(),update(),delete(),query()。
ContentResolver 中的增删改查方法使用Uri代替,内容URI给内容提供器中的数据建立了唯一标识符:权限和路径。
权限:用于对不同的应用程序作区分
路径:用于对同一应用的不同的表做区分
content://com.example.app.provider/table1
content://com.example.app.provider/table2
3、得到内容URI字符串后需要解析成Uri对象才可以作为参数传入
Uri uri = Uri.parse(“content://com.example.app.provider/table1”)。
4、然后可以使用Uri对象查询表中数据,或者增加,删除等操作
public class MainActivity extends Activity {
ListView contactsView;//控件显示垂直滚动列表项
ArrayAdapter<String> adapter;//适配器,帮助填充数据的中间桥梁
List<String> contactsList = new ArrayList<String>();
//列表,集合元素排序的维护,每个元素都有索引,可通过索引访问
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactsView = (ListView) findViewById(R.id.contacts_view);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactsList);
//构造器
contactsView.setAdapter(adapter);//设置ListView背后的数据
readContacts();
}
private void readContacts() {
Cursor cursor = null;
try {
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null);
//指定查询某个程序下的某一张表;指定查询列名;指定where约束条件;为where中占位符提供具体值;指定查询结果的排序方式
while (cursor.moveToNext()) {
String displayName = cursor.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactsList.add(displayName + "\n" + number);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();//关闭cursor对象
}
}
}
}
结果: