文档章节

内容提供者

chenruibing
 chenruibing
发布于 2015/05/27 16:09
字数 739
阅读 67
收藏 1
          内容提供者是Android中的四大组件之一,可以将应用中的数据对外进行共享

    内容提供者中数据更改可被监听

        内容提供者类  ContentProvider

        通过Context获得ContentResolver对象

        调用ContentResolver对象的方法即可访问内容提供者


package com.heima.proveders;

import com.heima.sqlitedemo.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 provedersCase extends ContentProvider {

	private static final String AUTHORITY="com.heima.proveders.provedersCase";
	private static final int PERSON_INSERT_CODE = 0;//操作person表添加的操作的uri匹配码
	private static final int PERSON_QUERY_ALL_CODE = 3;
	private static final int PERSON_UPDATE_CODE = 2;
	private static final int PERSON_DELETE_CODE = 1;
	private static final int PERSON_QUERY_ITEM_CODE = 4;
	
	//UriMatcher类用于匹配Uri
	private static UriMatcher ruiMatcher;
	private personSQLITEOpenHelper mOpenHelper = null;
	static{
		//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
		ruiMatcher = new UriMatcher(UriMatcher.NO_MATCH);//参数是不匹配时返回值的类型
		
		//添加一些uri(分机号)
		//1唯一标识   手机号
		//要干的事     分机号	person/insert是要在person这个表进行insert操作
		ruiMatcher.addURI(AUTHORITY, "person/insert", PERSON_INSERT_CODE);
		ruiMatcher.addURI(AUTHORITY, "person/delete", PERSON_DELETE_CODE);
		ruiMatcher.addURI(AUTHORITY, "person/update", PERSON_UPDATE_CODE);
		ruiMatcher.addURI(AUTHORITY, "person/queryAll", PERSON_QUERY_ALL_CODE);
		
		//特殊的符号   #
		ruiMatcher.addURI(AUTHORITY, "person/query/#", PERSON_QUERY_ITEM_CODE);
		
	}
	
	@Override
	public boolean onCreate() {
		// TODO Auto-generated method stub
		//刚创建的时候就把数据库操作帮助类给实例化出来
		mOpenHelper = new personSQLITEOpenHelper(getContext());
		return true;
	}
	
	@Override
	public int delete(Uri arg0, String arg1, String[] arg2) {
		// TODO Auto-generated method stub
		int sign = ruiMatcher.match(arg0);
		switch (sign) {
		case PERSON_DELETE_CODE:
			SQLiteDatabase db = mOpenHelper.getWritableDatabase();
			if(db.isOpen()){
				
				int count = db.delete("person", arg1, arg2);
				
				db.close();
				return count;
			}
			break;

		default:
			throw new IllegalArgumentException("uri不匹配: " + arg1);
		}
		return 0;
	}

	@Override
	public String getType(Uri uri) {  //这个方法只是为了方便系统的调用,完全不管也是可以的
		// TODO Auto-generated method stub
		int sign = ruiMatcher.match(uri);
		switch (sign) {
		case PERSON_QUERY_ALL_CODE: //返回多条的MIME-type
			return "vnd.android.cursor.dir/person";
		case PERSON_QUERY_ITEM_CODE: //查询单个的方法
			return "vnd.android.cursor.item/person";
		default:
			//这里不能抛出异常   直接break就可以了
			break;
		}
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		// TODO Auto-generated method stub
		//ruiMatcher不仅可以添加uri	还可以匹配uri
		int sign = ruiMatcher.match(uri);
		
		switch (sign) {
		case PERSON_INSERT_CODE:
			SQLiteDatabase db = mOpenHelper.getWritableDatabase();
			if(db.isOpen()){
				//执行操作
				long id = db.insert("person", null, values);
				
				db.close();
				//ContentUris	获取和添加Uri信息
				return ContentUris.withAppendedId(uri, id);//往uri后面再加上一个id
			}
			break;

		default:
			throw new IllegalArgumentException("uri不匹配: " + uri);
		}
		
		return null;
	}

	

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		// TODO Auto-generated method stub
		
		int sign = ruiMatcher.match(uri);
		SQLiteDatabase db = mOpenHelper.getReadableDatabase();
		switch (sign) {
		case PERSON_QUERY_ALL_CODE:
			
			if(db.isOpen()){
				
				Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
				return cursor;
//				db.close(); 这里的cursor不能关闭   一关闭结果集就没了,返回去也就没用了
			}
			break;
		case PERSON_QUERY_ITEM_CODE:  //查询单个值的情况
			if(db.isOpen()){
				
				long id = ContentUris.parseId(uri);
				Cursor cursor = db.query("person", projection, "_id = ?", new String[]{"id"}, null, null, sortOrder);
				return cursor;
			}
			break;
		default:
			throw new IllegalArgumentException("uri不匹配: " + uri);
		}
		
		return null;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		// TODO Auto-generated method stub
		int sign = ruiMatcher.match(uri);
		switch (sign) {
		case PERSON_UPDATE_CODE:
			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;
	}

}
内容提供者是四大组件之一,需要在配置清单进行配置

<provider android:name="com.heima.proveders.provedersCase" 
     android:authorities="com.heima.proveders.provedersCase">
</provider>




© 著作权归作者所有

chenruibing
粉丝 12
博文 203
码字总数 109101
作品 0
潮州
私信 提问
Android使用内容提供者方式进行存储

内容提供者(ContentProvider)主要作用是对外共享数据,如果数据通过内容提供者对外共享了,那么其他应用就可以从内容提供者中查询到数据,并且可更新数据、删除数据、添加数据,如果采用文件...

IBMdW
2011/09/26
749
0
安卓内容观察者 观察的具体对象

内容观察者 观察的对象是什么? 是直接观察数据库,还是观察Uri对应的内容提供者 如果是观察内容提供者的 那为什么发送短信的时候 他能监测到 难道发送短信这个应用 是经过本应用的内容提供者实...

J_Rong
2016/10/12
140
0
Android四大组件之ContentProvide(内容提供者)

访问私有数据库 创建一个项目,在项目中利用SQLiteOpenHelper创建一个名称为account的数据库,并在数据库中创建一张名为info的表。 在MainActivity中需要调用以下代码才能创建数据库: 运行程...

早早的太阳
2016/09/25
37
0
dubbo学习笔记 第三章简介dubbo的工作原理

一、工作原理图 这是dubbo官网的关于dubbo工作原理,其中最核心的应该是Registry注册中心,Monitor,Consumer消费者和Provider服务提供者四个部分,注册中心关系这消费者和提供者的在zookeep...

sesamefox
2017/10/26
159
0
非阻塞不可变模型管理系统--RocketData

Rocket Data是有持续同步层的非阻塞、不可变模型管理系统。它可以使用任何类型的缓存,可以使用简单的API来轻松地挂接到键值型存储上。 从2015年早期重写LinkedIn旗舰版应用时开始,他们就在...

匿名
2016/08/09
228
0

没有更多内容

加载失败,请刷新页面

加载更多

JDBC+C3P0+DBCP 基本使用

1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. 2.mysql的处理 这里的JDBC使用Mysql作为...

Blueeeeeee
今天
5
0
MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
9
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
7
0
安装Genymotion模拟器慢的解决方案

第一步点击下载, C:\Users\Administrator\AppData\Local\Genymobile\genymotion.log 中搜索 ova 会发现这个文件 使用迅雷下载即可. 在 虚拟机中导入这个.ova 文件 即可安装...

chenhongjiang
今天
5
0
4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

你好,我是彤哥,本篇是netty系列的第四篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的N...

彤哥读源码
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部