android 知识点 之Provider

本文深入探讨了Android ContentProvider的实现过程,包括定义CONTENT_URI、继承ContentProvider类、实现核心方法以及在AndroidManifest.xml中的声明。重点阐述了如何根据uri进行数据处理,如查询、更新、插入和删除操作。

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

实现contentProvider 的基本过程;
1、定义一个 CONTENT_URI 常量。
2、定义一个类 继承ContentProvider 。
3、实现 query,update,insert,delete,getType 和onCreate放法。
4、在AndroidManifest.xml 中声明
在application 标签中加入:
<provider  android:name="com.sslinm.FirstContentProvider"

              android:authorities="com.sslinm.FirstContentProvider"/>

为了数据的通用性

在provicer当中,根据uri 来判断,这个uri请求应该进行怎样的处理:(以query 方法为例)

@Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        System.out.println(" in the query method ");
        SQLiteQueryBuilder sqlB = new SQLiteQueryBuilder();
        // 条件过滤判断,符合那个uri条件进入那个分支
        int match = uriMatcher.match(uri);
        System.out.println(match+" is match");
        switch(match){
            case INCOMING_USER_COLLECTION :
                sqlB.setTables(UserTableMetaData.TABLE_NAME);
                sqlB.setProjectionMap(userProjectMap);
                break;
            case INCOMING_USER_SINGLE :
                sqlB.setTables(UserTableMetaData.TABLE_NAME);
                sqlB.setProjectionMap(userProjectMap);
                // 单个查询的条件
                sqlB.appendWhere(UserTableMetaData._ID+"="+uri.getPathSegments().get(1));
                break;
            default:throw new RuntimeException(" no match uri !!");
        }
        // 判断orderBy字句
        String orderBy;
        if(TextUtils.isEmpty(sortOrder)){
            orderBy = UserTableMetaData.DEFAULT_SORT_ORDER;
        }else{
            orderBy = sortOrder;
        }
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        Cursor cursor = sqlB.query(db, projection, selection, selectionArgs, null, null, orderBy);
        // 通知监听
        cursor.setNotificationUri(getContext().getContentResolver(), FirstProviderMetaData.UserTableMetaData.CONTENT_URI);
        
        return cursor;
    }




在activity 里面通过getContentResolver() 就可以得到一个 包含provider 调用的对象,然后调用provider中对应的方法 像什么insert,query等等



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值