1.我们首先new一个我们自己的类集成ContentProvider,并实现方法如下

package com.wzw.sqllitedemo.providers;import com.wzw.sqllitedemo.db.PersonSQLiteOpenHelper;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;public class PersonContentProvider extends ContentProvider {private static UriMatcher uriMatcher;private static final String authority="com.wzw.sqllitedemo.providers.PersonContentProvider";private static final int PERSON_INSERT_CODE = 0;private static final int PERSON_DELETE_CODE = 1;private static final int PERSON_UPDATE_CODE = 2;private static final int PERSON_QUERYALL_CODE = 3;private PersonSQLiteOpenHelper mOpenHelper;static{uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);//添加uri(分机号)//content://com.wzw.sqllitedemo.providers.PersonContentProvider/person/inserturiMatcher.addURI(authority, "person/insert", PERSON_INSERT_CODE);uriMatcher.addURI(authority, "person/delete", PERSON_DELETE_CODE);uriMatcher.addURI(authority, "person/update", PERSON_UPDATE_CODE);uriMatcher.addURI(authority, "person/queryAll", PERSON_QUERYALL_CODE);}@Overridepublic boolean onCreate() {mOpenHelper=new PersonSQLiteOpenHelper(getContext());return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {switch (uriMatcher.match(uri)) {case PERSON_QUERYALL_CODE:SQLiteDatabase db=mOpenHelper.getReadableDatabase();if(db.isOpen()){Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);return cursor;//db.close();返回cursor结果集时不能关闭数据库}break;default:throw new IllegalArgumentException("uri不匹配");}return null;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {switch (uriMatcher.match(uri)) {case PERSON_INSERT_CODE://添加人到person表中SQLiteDatabase db = mOpenHelper.getWritableDatabase();if (db.isOpen()) {long id = db.insert("person", null, values);db.close();//返回的类型为content://com.wzw.sqllitedemo.providers.PersonContentProvider/person/insert/idreturn ContentUris.withAppendedId(uri, id);}break;default:throw new IllegalArgumentException("uri不匹配");}return null;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {switch (uriMatcher.match(uri)) {case PERSON_DELETE_CODE://在person中删除数据SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()){int count=db.delete("person", selection, selectionArgs);db.close();return count;}break;default:throw new IllegalArgumentException("uri不匹配"+uri);}return 0;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {switch (uriMatcher.match(uri)) {case PERSON_UPDATE_CODE://更新person表SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()){int count=db.update("person", values, selection, selectionArgs);db.close();return count;}break;default:throw new IllegalArgumentException("uri不匹配"+uri);}return 0;}}

在清单文件中声明

                                    

2.然后我们在新建一个工程来测试

新建一个junit测试类


package com.wzw.other;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;public class TestCase extends AndroidTestCase {private String tag="TestCase";public void testInsert(){//另外一个程序的uriUri uri = Uri.parse("content://com.wzw.sqllitedemo.providers.PersonContentProvider/person/insert");//获取内容提供者访问对象ContentResolver resolver = getContext().getContentResolver();ContentValues values = new ContentValues();values.put("name","meimei");values.put("age", 18);Log.i(tag, "uri"+uri);uri = resolver.insert(uri, values);long id = ContentUris.parseId(uri);Log.i(tag, "插入的id"+id);}public void testDelete(){//另外一个程序的uriUri uri = Uri.parse("content://com.wzw.sqllitedemo.providers.PersonContentProvider/person/delete");//获取内容提供者访问对象ContentResolver resolver = getContext().getContentResolver();String where = "_id=?";String[] selectionArgs={"8"};int count = resolver.delete(uri, where, selectionArgs);Log.i(tag, "删除了"+count);}public void tesUpdate(){//另外一个程序的uriUri uri = Uri.parse("content://com.wzw.sqllitedemo.providers.PersonContentProvider/person/update");//获取内容提供者访问对象ContentResolver resolver = getContext().getContentResolver();ContentValues values=new ContentValues();values.put("name", "lisi");int count = resolver.update(uri, values, "_id=?", new String[]{"9"});Log.i(tag, "更新了:"+count);}public void testQueryAll(){//另外一个程序的uriUri uri = Uri.parse("content://com.wzw.sqllitedemo.providers.PersonContentProvider/person/queryAll");//获取内容提供者访问对象ContentResolver resolver = getContext().getContentResolver();Cursor cursor = resolver.query(uri, new String[]{"_id","name","age"}, null, null, "_id");if(cursor!=null&&cursor.getCount()>0){int id;String name;int age;while(cursor.moveToNext()){id=cursor.getInt(0);name=cursor.getString(1);age=cursor.getInt(2);Log.i(tag, "id:"+id+"name:"+name+"age:"+age);}cursor.close();}}}

把第一个工程部署以后。内容提供者就在手机中存在了,然后用第二个工程来测试他。


更多相关文章

  1. android 之json对象解析并展示(含json解析源码)
  2. Android中使用putExtra()传递对象实例
  3. Android之短信广播接收内容
  4. Android核心模块内容概述 2012.07.25
  5. Android canvas 清空内容
  6. 开发笔记---软键盘遮挡输入框和导航栏遮挡了内容的解决方案

随机推荐

  1. Android(安卓)控件布局常用属性
  2. android 电容屏(三):驱动调试之驱动程序分析
  3. Android系统启动流程(2) —— 解析Zygote
  4. Android(安卓)自定义View自定义属性的声
  5. android 学习笔记(一):1 环境搭建
  6. android 的webview调用php服务器js , js
  7. Android控件布局常用属性
  8. Android(安卓)面试必备 - 线程
  9. Android(安卓)远程调试 JNI 实现 ( Androi
  10. Android(安卓)常用UI控件的一些属性设置(