ContentProvider 用法
来源:互联网 发布:java接口压力测试工具 编辑:程序博客网 时间:2024/06/14 02:57
有问题请加:Q群: 241359063 共同走向创业学习之旅。
原创:kylin_zeng http://blog.chinaunix.net/uid/23795897.html
在此感谢mars 老师的帮助。转载请注明原创出处,尊重他人的劳动成果。
一、ContentProvider作用
1、contentProvider提供为存储和获取数据提供统一的接口。
2、可以再不同的应用程序之间共享数据。
3、android 为常见的一些数据提供了contentProvider。如果视频,图片等。
二、通过URI找到某一个ContentProvider:
1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个CP 所提供的数据。
2、Android所提供的CP都存放在android.provider包中
三、CP提供的函数:
1、query() 查询。
2、insert() 插入.
3、update() 更新。
4、delete() 删除。
5、getType() 得到数据的类型。
6、onCreate() 创建时的回调函数。
四、实现CP的过程:
1、定义CONTENT_URI常量。
2、定义一个类,继承CP
3、实现上面的方法。
4、在AndroidManifest.xml中进行声明。
五、实现,CONTENT_TYPE="vnd.android.cursor.dir/随便名字" //整张表,很多数据。
CONTENT_TYPE_ITEM="vnd.android.cursor.item/随便名字 //某一个数据。
例:
1、在AndroidManifest.xml定义
<provider android:name="mars.cp.FirstContentProvider"
android:authorities="mars.cp.FirstContentProvider"/>
二、创建CPActivity.java
三、创建FirstProviderMetaData.java:
四、创建CPActivity.java:
19集Lesson_19_code.zip
原创:kylin_zeng http://blog.chinaunix.net/uid/23795897.html
在此感谢mars 老师的帮助。转载请注明原创出处,尊重他人的劳动成果。
一、ContentProvider作用
1、contentProvider提供为存储和获取数据提供统一的接口。
2、可以再不同的应用程序之间共享数据。
3、android 为常见的一些数据提供了contentProvider。如果视频,图片等。
二、通过URI找到某一个ContentProvider:
1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个CP 所提供的数据。
2、Android所提供的CP都存放在android.provider包中
三、CP提供的函数:
1、query() 查询。
2、insert() 插入.
3、update() 更新。
4、delete() 删除。
5、getType() 得到数据的类型。
6、onCreate() 创建时的回调函数。
四、实现CP的过程:
1、定义CONTENT_URI常量。
2、定义一个类,继承CP
3、实现上面的方法。
4、在AndroidManifest.xml中进行声明。
五、实现,CONTENT_TYPE="vnd.android.cursor.dir/随便名字" //整张表,很多数据。
CONTENT_TYPE_ITEM="vnd.android.cursor.item/随便名字 //某一个数据。
例:
1、在AndroidManifest.xml定义
<provider android:name="mars.cp.FirstContentProvider"
android:authorities="mars.cp.FirstContentProvider"/>
二、创建CPActivity.java
点击(此处)折叠或打开
- 创建两个按钮,插入和查询
- queryButton = (Button) findViewById(R.id.query);
- queryButton.setOnClickListener(new QueryListener());
- insertButton = (Button) findViewById(R.id.insert);
- insertButton.setOnClickListener(new InsertListener());
点击(此处)折叠或打开
- class InsertListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- ContentValues values = new ContentValues();
- values.put(FirstProviderMetaData.UserTableMetaData.USER_NAME,
- "zhangsan");
- Uri uri = getContentResolver()
- .insert(
- FirstProviderMetaData.UserTableMetaData.CONTENT_URI,
- values);
- System.out.println("uri--->" + uri.toString());
- }
- }
- class QueryListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Cursor c = getContentResolver().query(
- FirstProviderMetaData.UserTableMetaData.CONTENT_URI, null,
- null, null, null);
- while(c.moveToNext()){
- System.out.println(c.getString(c.getColumnIndex(UserTableMetaData.USER_NAME)));
- }
- }
- }
三、创建FirstProviderMetaData.java:
点击(此处)折叠或打开
- public class FirstProviderMetaData {
- public static final String AUTHORIY = "mars.cp.FirstContentProvider";
- //数据库名称
- public static final String DATABASE_NAME = "FirstProvider.db";
- //数据库的版本
- public static final int DATABASE_VERSION = 1;
- //表名
- public static final String USERS_TABLE_NAME = "users";
-
- public static final class UserTableMetaData implements BaseColumns{
- //表名
- public static final String TABLE_NAME = "users";
- //访问该ContentProvider的URI
- public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORIY + "/users");
- //该ContentProvider所返回的数据类型的定义
- public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.firstprovider.user";
- public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.firstprovider.user";
- //列名
- public static final String USER_NAME = "name";
- //默认的排序方法
- public static final String DEFAULT_SORT_ORDER = "_id desc";
- }
- }
四、创建CPActivity.java:
点击(此处)折叠或打开
- public class FirstContentProvider extends ContentProvider {
- public static final UriMatcher uriMatcher;
- public static final int INCOMING_USER_COLLECTION = 1;
- public static final int INCOMING_USER_SINGLE = 2;
- private DatabaseHelper dh;
- static {
- uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
- uriMatcher.addURI(FirstProviderMetaData.AUTHORIY, "/users",
- INCOMING_USER_COLLECTION);
- uriMatcher.addURI(FirstProviderMetaData.AUTHORIY, "/users/#",
- INCOMING_USER_SINGLE);
- }
-
- public static HashMap<String,String> userProjectionMap;
- static
- {
- userProjectionMap = new HashMap<String,String>();
- userProjectionMap.put(UserTableMetaData._ID,UserTableMetaData._ID);
- userProjectionMap.put(UserTableMetaData.USER_NAME, UserTableMetaData.USER_NAME);
- }
- @Override
- public int delete(Uri arg0, String arg1, String[] arg2) {
- // TODO Auto-generated method stub
- System.out.println("delete");
- return 0;
- }
- //根据传入的URI,返回该URI所表示的数据类型
- @Override
- public String getType(Uri uri) {
- // TODO Auto-generated method stub
- System.out.println("getType");
- switch(uriMatcher.match(uri)){
- case INCOMING_USER_COLLECTION:
- return UserTableMetaData.CONTENT_TYPE;
- case INCOMING_USER_SINGLE:
- return UserTableMetaData.CONTENT_TYPE_ITEM;
- default:
- throw new IllegalArgumentException("Unknown URI" + uri);
- }
- }
- /**
- * 该函数的返回值是一个Uri,这个Uri表示的是刚刚使用这个函数所插入的数据
- * content://mars.cp.FirstContentProvider/users/1
- */
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- System.out.println("insert");
- SQLiteDatabase db = dh.getWritableDatabase();
- long rowId = db.insert(UserTableMetaData.TABLE_NAME, null, values);
- if(rowId > 0){
- Uri insertedUserUri = ContentUris.withAppendedId(UserTableMetaData.CONTENT_URI, rowId);
- //通知监听器,数据已经改变
- getContext().getContentResolver().notifyChange(insertedUserUri, null);
- return insertedUserUri;
- }
- throw new SQLException("Failed to insert row into" + uri);
- }
- //是一个回调方法,所以说在ContentProvider创建的时候执行
- @Override
- public boolean onCreate() {
- //打开数据库
- dh = new DatabaseHelper(getContext(),FirstProviderMetaData.DATABASE_NAME);
- System.out.println("onCreate");
- return true;
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
- SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
- switch(uriMatcher.match(uri)){
- case INCOMING_USER_COLLECTION:
- qb.setTables(UserTableMetaData.TABLE_NAME);
- qb.setProjectionMap(userProjectionMap);
- break;
- case INCOMING_USER_SINGLE:
- qb.setTables(UserTableMetaData.TABLE_NAME);
- qb.setProjectionMap(userProjectionMap);
- qb.appendWhere(UserTableMetaData._ID + "=" + uri.getPathSegments().get(1));
- break;
- }
- String orderBy;
- if(TextUtils.isEmpty(sortOrder)){
- orderBy = UserTableMetaData.DEFAULT_SORT_ORDER;
- }
- else{
- orderBy = sortOrder;
- }
- SQLiteDatabase db = dh.getWritableDatabase();
- Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
- c.setNotificationUri(getContext().getContentResolver(), uri);
- System.out.println("query");
- return c;
- }
- @Override
- public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
- // TODO Auto-generated method stub
- System.out.println("update");
- return 0;
- }
- }
19集Lesson_19_code.zip
0
上一篇:linux pwm 应用
下一篇:android xml文件的解析
相关热门文章
- Android之开发环境搭建
- Android自定义View的实现...
- AndroidManifest.xml配置文件...
- Android源码调试方法详解...
- 不用vs和cygwin!Eclipse+cdt...
- 请问Linux默认shell的是什么 ...
- 谁能够帮我解决LINUX 2.6 10...
- 现在的博客积分不会更新了吗?...
- shell怎么读取网页内容...
- ssh等待连接的超时问题...
给主人留下些什么吧!~~
评论热议
0 0
- ContentProvider 用法
- contentprovider用法
- ContentProvider的用法
- 说说ContentProvider的用法
- 说说ContentProvider的用法
- ContentProvider的用法
- 自定义ContentProvider用法
- ContentProvider的用法浅析
- ContentProvider的用法
- ContentProvider的详细用法
- ContentProvider简单用法
- ContentProvider简单用法
- Contentprovider的基本用法
- Android ContentProvider基本用法
- ContentProvider(内容提供者)用法详解
- ContentProvider(内容提供者)用法详解
- ContentProvider(内容提供者)用法详解
- ContentProvider(内容提供者)用法详解
- 第十七周项目6-学生成绩统计(5)
- Centos下服务器版本安装mysql
- android 网络下载文件 和 读写sdcard 方法
- opencv 检测待测图片是否包含样本
- linux pwm 应用
- ContentProvider 用法
- android xml文件的解析
- __attribute__
- android wifi 的开启,关闭,查询等。
- Android TCP 和 UDP
- QT中为生成的exe运行文件添加图标
- android service 用法
- PHP 报表排序及制作思路
- service bunder 下 Parcel 用法
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
火焰温暖明亮改为感叹句
树叶飘落下来改为比喻句
民事诉讼时效改为三年
桃花从树上落下来改为比喻句
结婚年龄规定2019改为19岁
这不是难为蝴蝶吗改为陈述句
蝴蝶肯定也有家改为设问句
小鸟在树枝上叫改为拟人句
机西高速为什么改为安罗高速
二居改三居隔断效果图
唐槐园二期综改区敢不敢买
龙珠改 第二季 日语
科目二改自动挡会很吃亏吗
改签可以改第二天的吗
二楼改独立下水多少钱
二年级被字句改把字句大全
二楼改下水道多少钱
二居改三居
西安地铁五号线二期线路改了
无座票上车后可以改二等座
改写人生
改写
暮江吟改写
示儿改写
word改写
改写暮江吟
白鹭改写说明文
五年级白鹭改写说明文
小镇绿事改写
杨永泰不死改写中国历史
改写天净沙秋思
答谢中书书改写散文
天净沙秋思改写散文
天净沙秋思改写
word改写切换
答谢中书书改写
人生改写系统
改写记承天寺夜游
改写卖火柴的小女孩结局
记承天寺夜游改写
五年级白鹭2至5段改写说明文