安卓 Content privider

在安卓里面,内容提供者者是作为平台供访问者访问,在此访问时一定需要准确的访问地址的路径,以下是内容提供者的代码,需要以下几个类:

1.数据库链接;

2.一个需要访问的类,此例以person举例;

3.一个继承contentprivder的类;

4.一个主类即Mainactivity


//peson类

package com.xh.tx.bean;

public class Person
{
	private Integer id;
	private String name;
	private Integer age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}
//数据库链接

package com.xh.tx.utils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLLiteHelper extends SQLiteOpenHelper
{

	/**
	 * 函数的作用:构造方法用来创建工具类
	 * param1: context 上下文环境
	 * param2: name 数据库的名称
	 * param3: factory 游标对象Cursor 
	 * parma4: varsion 数据库的版本 数据库的版本不能从0开始
	 * @param context
	 */
	public MySQLLiteHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, "test.db", null, 1);
	}

	/**
	 * 用来创建数据库
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "create table person (id integer primary key, name varchar(20), age integer);";
		
		db.execSQL(sql);// 真正执行数据的创建
	}

	//数据库版本更新
	//版本需要发生变化,否则不会执行
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		/*Log.d("============", oldVersion + "  : " + newVersion);
		if(oldVersion == 1)
		{
			String sql = "alter table person add balance integer;";
			db.execSQL(sql);
		}*/
	}
	
	//每次打开数据库的时候调用
	@Override
	public void onOpen(SQLiteDatabase db) {
		super.onOpen(db);
	}

}
//继承contentprivder的类
定义主机号  分机号实现增删改查
package com.xh.tx.contentprivoder;

import com.xh.tx.utils.MySQLLiteHelper;

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;

/**
 * 要完成一个内容提供者你需要遵循以下步骤
 * 	1. extends ConcentePrivoder
 *  2. 提供一个数据库的连接工具类MySQLLiteHelper
 *  3. 定义我们的主号码和分机号
 * 
 * @author soft
 *
 */

public class PersonContentPrivoder extends ContentProvider
{
	private MySQLLiteHelper helper = null;
	
	//uriMatcher 工厂
	private static UriMatcher uriMatcher = null;
	private static final String AURHORITH = "com.xh.tx.contentprivoder.PersonContentPrivoder"; // 这个就是主号码

	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_QUERY_CODE = 3;
	
	static{
		uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);//参数就是分机号
		
		//添加插入的分机号
		//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/insert
		uriMatcher.addURI(AURHORITH, "person/insert", PERSON_INSERT_CODE);
		
		//更新插入的分机号
		//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/update
		uriMatcher.addURI(AURHORITH, "person/update", PERSON_UPDATE_CODE);
		
		//删除的分机号
		//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/delete
		uriMatcher.addURI(AURHORITH, "person/delete", PERSON_DELETE_CODE);
		
		//查询的分机号
		//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/query
		uriMatcher.addURI(AURHORITH, "person/query", PERSON_QUERY_CODE);
	}
	
	

	//在内容提供者创建的时候初始化我们的数据库工具类
	@Override
	public boolean onCreate() {
		
		helper = new MySQLLiteHelper(getContext(), null, null, -1);
		
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		
		switch (uriMatcher.match(uri)) {
		case PERSON_QUERY_CODE:
			
			SQLiteDatabase db = helper.getWritableDatabase();
			
			if(db.isOpen())
			{
				Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
				
			//	db.close(); // 不能关掉数据库否者访问不到数据
				
				return cursor;
			}
			
			break;

		default:
			throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
		}
		return null;
	}

	//由系统调用,所以我们一般不会重写他
	@Override
	public String getType(Uri uri) {
		return null;
	}

	//inert方法提供真实的服务
	@Override
	public Uri insert(Uri uri, ContentValues values) {
		//访问地址:content://com.xh.tx.contentprivoder.PersonContentPrivoder/person/query
		//返回一个uri类型的数据 一般我们就将就访问地址,然后在地址后面追加添加成功以后返回的id
		
		switch (uriMatcher.match(uri)) {
		case PERSON_INSERT_CODE:
			
			SQLiteDatabase db = helper.getWritableDatabase();
			
			if(db.isOpen())
			{
				long id = db.insert("person", null, values);
				db.close();
				
				return ContentUris.withAppendedId(uri, id);
			}
			
			break;

		default:
			throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
		}
		
		return null;
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		
		switch (uriMatcher.match(uri)) {
		case PERSON_DELETE_CODE:
			
			SQLiteDatabase db = helper.getWritableDatabase();
			
			if(db.isOpen())
			{
				int id = db.delete("person", selection, selectionArgs);
				db.close();
				
				return id;
			}
			break;
		default:
			throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
		}
		
		return 0;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		
		switch (uriMatcher.match(uri)) {
		case PERSON_UPDATE_CODE:
			
			SQLiteDatabase db = helper.getWritableDatabase();
			
			if(db.isOpen())
			{
				int id = db.update("person", values, selection, selectionArgs);
				db.close();
				
				return id;
			}
			break;
		default:
			throw new IllegalArgumentException("参数错误 :" + uri); //匹配不上的时候抛出异常提醒uri传递错误
		}
		return 0;
	}

}
//一个MAINactivity

package com.xh.tx.contentprivoder;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
}



你可能感兴趣的:(代码)