有问题请加: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
阅读(5) | 评论(0) | 转发(0) |
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
原创: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
相关热门文章
给主人留下些什么吧!~~
评论热议