一个ContentProvider的Demo

第一:

在AndroidMainfest.xml 中 的<application>标签中进行进行配置 

<pre name="code" class="html"><span style="white-space:pre">	</span><provider 
<span style="white-space:pre">	</span>    android:name="content.PersonContent"
            android:authorities="com.mirs.demotoone.content.PersonContent"
            android:exported="true"
        ></provider>
 

创建一个类  继承于 Contentprovider


public class PersonContent extends ContentProvider{
	//content://com.mirs.demotoone.content.PersonContent/person/insert
	private static	final String AUTHORITY="com.mirs.demotoone.content.PersonContent"; // 这里我是写成和xml中的一样
	private DBMaanger dbManager;

	private static final int PERSON_INSERT_CODE = 0;  //操作码

	private static final int PERSON_UPDATE_CODE = 1;

	private static final int PERSON_DELETE_CODE = 2;

	private static final int PERSON_GETALL_CODE = 3;
	
	private static 	UriMatcher uriMatcher;
	static{
		uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
		/**
		 * 添加一些分机号
		 * */
		//insert 
		uriMatcher.addURI(AUTHORITY, "person/insert", PERSON_INSERT_CODE);
		//update
		uriMatcher.addURI(AUTHORITY, "person/update", PERSON_UPDATE_CODE);
		//delete
		uriMatcher.addURI(AUTHORITY, "person/delete", PERSON_DELETE_CODE);
		//getAll
		uriMatcher.addURI(AUTHORITY, "person/getAll", PERSON_GETALL_CODE);
	}

	@Override
	public int delete(Uri arg0, String arg1, String[] arg2) {
		// TODO Auto-generated method stub
		switch (uriMatcher.match(arg0)) {      //删除
		case PERSON_DELETE_CODE:
			SQLiteDatabase db=dbManager.getWritableDatabase();
			if(db.isOpen()){
				int id=db.delete("perosn",arg1, arg2);
				db.close();
				return 	id;
			}
			break;

		default:
			throw new IllegalArgumentException("delete"+arg0);
			
		}
		return 0;
	}

	@Override
	public String getType(Uri arg0) {<span style="white-space:pre">		</span>//获取数据类型  系统自己运行
		// TODO Auto-generated method stub
		switch (uriMatcher.match(arg0)) {
		case PERSON_GETALL_CODE://	返回多条的MIME-type
			return "vnd.android.cursor.dir/person";
		default:
			break;
		}
		return null;
	}

	@Override
	public Uri insert(Uri arg0, ContentValues arg1) { //添加
		// TODO Auto-generated method stub
		switch (uriMatcher.match(arg0)) {
		case PERSON_INSERT_CODE:
			SQLiteDatabase db=dbManager.getWritableDatabase();
			if(db.isOpen()){
				long id=db.insert("perosn", null, arg1);
				db.close();
				return 	ContentUris.withAppendedId(arg0, id);
			}
			break;

		default:
			throw new IllegalArgumentException("inserto"+arg0);
			
		}
		return null;
	}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">		</span>Oncreate是系统自动运行的
*/
	@Override
	public boolean onCreate() {
		// TODO Auto-generated method stub<span style="white-space:pre">	</span>
		dbManager=new DBMaanger(getContext());
		return false;
	}

	@Override
	public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
			String arg4) {
		// TODO Auto-generated method stub
		switch (uriMatcher.match(arg0)) {
		case PERSON_GETALL_CODE:
			SQLiteDatabase db=dbManager.getWritableDatabase();
			if(db.isOpen()){
				Cursor cursor=db.query("person", arg1, arg2, arg3, null, null, arg4);
				return 	cursor;
			}
			break;

		default:
			throw new IllegalArgumentException("query"+arg0);
			
		}
		return null;
	}

	@Override
	public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {<span style="white-space:pre">		</span>//更新
		// TODO Auto-generated method stub
		switch (uriMatcher.match(arg0)) {
		case PERSON_UPDATE_CODE:
			SQLiteDatabase db=dbManager.getWritableDatabase();
			if(db.isOpen()){
				int id=db.update("person", arg1, arg2, arg3);
				db.close();
				return id;
			}
			break;

		default:
			throw new IllegalArgumentException("update"+arg0);
			
		}
		return 0;
	}

}



创建一个新的Android项目  在一个Test类中

public void testInsert(){
<span style="white-space:pre">		</span>//创建一个uri  调用静态方法
		Uri uri=Uri.parse("content://com.mirs.demotoone.content.PersonContent/person/insert");
		ContentResolver resolver = getContext().getContentResolver();
		ContentValues values=new ContentValues();
		values.put("name", "凤姐");
		values.put("age", 18);
		uri=resolver.insert(uri, values);
		long id=ContentUris.parseId(uri);
		Log.i(TGA, "添加到"+id);
	}

然后 run  Ok  成功在Log中看到数据


注意在xml中的 

 android:exported="true"
不然会出现  java.lang.SecurityException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值