内容提供器--1、使用现有内容提供器

本文介绍Android中的内容提供器(ContentProvider),包括其作用、如何使用ContentResolver进行数据的增删改查操作,并给出一个具体的读取联系人的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自第一行代码
内容提供器(Content Provider):用于在不同的应用程序之间实现数据共享的功能,使用内容提供器是 Android 实现跨程序共享数据的标准方式。

  1. 使用现有的内容提供器来读取和操作相应程序中
    的数据
  2. 创建自己的内容提供器给我们程序的数据提供外部访问接口

当一个应用程序通过内容提供器对其数据提供了外部访问接口,任何其他的应用程序就都可以对这部分数据进行访问。
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对象
            }
        }
    }

}

结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值