android 知识点 之Provider

来源:互联网 发布:数据采集与处理投稿 编辑:程序博客网 时间:2024/05/20 11:32
实现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等等