`

ContentProvider示例

 
阅读更多

ContentProvider示例

    //数据库管理层
	//数据库操作工具类
	public class DbHelper extends SQLiteOpenHelper
	{
	   private static final int VERSION=1;
	   private static final String DBNAME="appDataBase";//数据库名称
	   
	   public DbHelper(Context context)//构造方法
	      {super(context, DBNAME, null, VERSION)}//必须调用父类的构造方法
		  
	   public DbHelper(Context context,int version)//构造方法
	      {super(context, DBNAME, null, version)}//必须调用父类的构造方法
		  
	    abstract onCreate(SQLiteDatabase db)//当数据库第一次加载时执行此方法
		{
		   db.execSQL(" create table tb_user(userid int not null primary key auto_increment,
                                         username varchar(20)) ");
		   db.execSQL(" create table tb_rz(rzid int not null primary key auto_increment,
                                         rzbt  varchar(30)), rznr userid int not null 
                                         foreign key(tb_rz) references (tb_user) ");
		}
		
		abstract onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//数据库版本管理
		{
		   //版本升级应考虑保存原有数据,有待改进
		   db.execSQL(" drop table if exists tb_user;create table tb_user(userid int not null
                                          primary key auto_increment,name varchar(20)) ");
		   db.execSQL(" drop table if exists tb_rz;create table tb_rz(rzid int not null
                                         primary key auto_increment, rzbt  varchar(30)),
                                         rznr userid int not null foreign key(tb_rz) references (tb_user) ");
		}
	
	}
	//业务逻辑层
    //用户表service	
	class UserService
	{
	   private DbHelper dbHelper=null;
	   private Cursor=null;//get set方法
	   
	   public UserService(Context context)
	   {  dbHelper=new DbHelper(context); }
	   
	   public UserService(Context context,int version)
	   {this.context=context;  dbHelper=new DbHelper(context,version);}
	   
	   public long insert(ContentValues values)
	   {
	      SQLiteDatabase db=dbHelper.getWritableDatabase();
		  long id=db.insert("tb_user","username",values );
		  return id;  
		  //db.close();没有必要关闭数据库,SQLiteOpenHelper默认要缓存数据库
	   }
	   
	   public int  delete(String where,String[] whereArgs)//依据userid删除
	   {
	      SQLiteDatabase db=dbHelper.getWritableDatabase();
		  int count=db.delete("tb_user",where,whereArgs );
		  return count; 
		  //db.close();没有必要关闭数据库,SQLiteOpenHelper默认要缓存数据库
	   }
	   
	   public int  update(ContentVaues values,String where,String [] whereArgs)//依据userid更新
	   {
	      SQLiteDatabase db=dbHelper.getWritableDatabase();
		  int count=db.update("tb_user",values,whereArgs );
		  return count;
		  //db.close();没有必要关闭数据库,SQLiteOpenHelper默认要缓存数据库
	   }	   
	   
           //查询user表中的所有记录
	   public List<user> query(String[] columns,String where,String [] whereArgs)
	   {
	      List<User> users=new ArraryList<User>();
		  SQLiteDatabase db=dbHelper.getReadableDatabase();
		  Cursor cursor=db.query("tb_user",columns,where,whereArgs);
		  this.cursor=cursor;
		  while(cursor.moveTonext())
		  {
		    User user=new User();
		    int userid=cursor.getInteger(cursor.getColumnIndex(""));
			Stirng username=cursor.getString(cursor.getColumnIndex("username"));
			
			user.setUserid(userid);
			user.setUsername(username);
			users.add(user);
		  }
		  return users;
	   }
	}
	
	//日志表service
	class RzService
	{ 。。。。。。。}
	
    //应用的ContentProvider类MyContentProvider
	class MyContentProvider extends ContentProvider
	{
	    private UserService userService=null;
		private RzService rzService=null;
		
	    public boolean onCreate()//初始化业务对象
		{
		  userService=new UserService(this.getContext() );
		  rzService=new RzService(this.getContext() );
		  return true;
		}
		
	    public Uri insert(Uri uri,ContentValues values)
		{
		   int macth=myMatcher.macth(uri);
		   long id=-1;
           Uri tempUri=null;		   
		   if(match==USERS)
		   {
		      id=userService.insert(values);
			  tempUri=ContentUris.withAppendedId(uri,id);
			  return tempUri;
		   }
		   
		   if((match==USER)
		   {
		      id=userService.insert(values);
			  String path=uri.toString();
			  tempUri=Uri.parse(path.subString(0,path.lastIndexOf("/"))+id);//重新解析Uri
			  return tempUri;
		   }
		   
		   if(match==RZS) {...}
		   if(match==RZ) {...}
		}
	    public int delete(Uri uri,String where,String[] whereArgs)
		{
		  int macth=myMatcher.macth(uri);
		   int count=-1;		   
		   if(match==USERS)
		   {
		      count=userService.delete(where,whereArgs);
			  return count;
		   }
		   
		   if((match==USER)
		   {
		       String [] tempWhereArgs=null;
			   String tempWhere="";
			   long id=ContentUris.parseId(uri);
			   if(!where.equals("") && whereArgs!=null)
			   {
			      tempWhereArgs=new String[whereArgs.length()+1];
			      for(int i=0;i<whereArgs.length();i++)
				  {
				     tempWhereArgs[i]=whereArgs[i];
				  }
				  tempWhereArgs[whereArgs.length()+1]=String.valueOf(id);
				  tempWhere=where+"and userid=?"
			   }
			   else
			   {
			      tempWhereArgs=new String []{String.valueOf(id)};
			      tempWhere="and userid=?";
			   }
			   count=db.delete(tempWhere,tempWhereArgs);
		   }
		   
		   if(match==RZS) {...}
		   if(match==RZ) {...}
		}
		}
	    public Cursor query(Uri uri,String[] columnNames,Stirng where,
                                            String whereArgs,String order);
	    public update(Uri uri,ContentValues values,String where,String whereArgs);
	
        //用户表tb_user(userid),日志表tb_rz(rzid)
        private final static int USERS=1;
        private final static int USER=11;
		private final static int RZS=2;
		private final static int RZ=21;
		private UriMatcher myMatcher=new UriMatcher(-1);
		
		//建立uri匹配库
		static
		{
		   myMatcher。addUri("com.ssj.android.provider","tb_user",USERS);
		   myMatcher。addUri("com.ssj.android.provider","tb_user/#",USER);
		   myMatcher。addUri("com.ssj.android.provider","tb_rz",RZS);
		   myMatcher。addUri("com.ssj.android.provider","tb_rz/#",RZ);
		}
		
		public Stirng getType(Uri uri)
		{
		   int macth=myMatcher.macth(uri);
		   switch(macth)
		   {
		      case USERS:  
			         return "vnd.android.cursor.dir/tb_user"; break;
			  case USER:  
			         return "vnd.android.cursor.item/tb_user"; break;
			  case RZS:  
			         return return "vnd.android.cursor.dir/tb_rz"; break;
			  case RZ:  
			         return "vnd.android.cursor.item/tb_rz"; break;		
			  default:
			  return null;
		   }
		}
	}
分享到:
评论

相关推荐

    摘抄罗升阳(大神)的contentprovider示例

    在Android开发中,...总之,罗升阳的ContentProvider示例是学习Android数据共享机制的重要资源,通过深入研究和实践,我们可以提升在Android平台上的数据管理能力,为开发出更加健壮和高效的移动应用奠定坚实基础。

    contentprovider示例

    接下来,我们将创建一个简单的ContentProvider示例: 1. 首先,定义UriMatcher,为不同的操作添加匹配规则,如: ``` UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI(...

    实现 ContentProvider 示例程序

    本示例程序将深入探讨如何实现一个完整的ContentProvider,包括query、insert、update、delete以及getType方法。 首先,让我们了解ContentProvider的基本结构。一个ContentProvider类需要继承自`android.content....

    从头学Android之ContentProvider示例源代码

    本示例源代码旨在帮助初学者理解ContentProvider的工作原理及其使用方法。通过分析和实践这个"ContentProviderDemo"项目,我们可以深入学习到以下关键知识点: 1. **ContentProvider基础** - ContentProvider是...

    Android中ContentProvider的示例

    本示例将深入讲解如何创建和使用ContentProvider。 首先,我们来理解ContentProvider的基本概念。ContentProvider是Android提供的一种标准化的数据访问接口,它可以封装各种类型的数据,如SQLite数据库、文件系统、...

    android contentprovider使用示例

    5. **ContentProvider示例** 假设我们有一个名为"Contacts"的数据表,包含id, name和phone字段,我们可以这样创建一个简单的ContentProvider: ```java public class MyContactProvider extends ContentProvider...

    filecraft-contentprovider-intro:FileCraft ContentProvider 示例应用程序

    filecraft-contentprovider-介绍FileCraft ContentProvider 示例 Android 应用程序。 在 Google Play 商店中与 FileCraft 一起使用。 这是示例插件应用程序的早期版本。 随着我更多地测试和使用它,事情可能会发生...

    Android+Room+ContentProvider

    以下是一个简单的ContentProvider示例: ```java public class MyContentProvider extends ContentProvider { private AppDatabase db; @Override public boolean onCreate() { db = Room.databaseBuilder...

    android 数据库 以及自定义ContentProvider demo

    以下是一个简单的自定义ContentProvider示例: ```java public class MyProvider extends ContentProvider { private static final String AUTHORITY = "com.example.myprovider"; private static final ...

    自定义ContentProvider的简单例子

    在Android开发中,ContentProvider是四大组件之一,用于在应用程序之间共享数据。...在`ContentProviderTest`这个案例中,开发者可能已经实现了一个简单的数据库操作的ContentProvider示例,可供学习和参考。

    mars—第一季android——contentProvider

    在“TestCP”文件中,很可能是实现了一个具体的ContentProvider示例。这个示例可能包含了创建ContentProvider的步骤,如定义Uri匹配规则(通过UriMatcher)、创建SQLite数据库或数据存储结构,以及上述提到的方法的...

    安卓ContentProvider详解例程

    通过这个简单的ContentProvider示例,新手可以快速掌握如何在Android应用之间共享数据。实践是最好的老师,动手尝试编写和使用ContentProvider,将帮助你更好地理解其工作原理和使用场景。ContentProvider在多应用...

    ContentProvider使用

    以下是一个简单的ContentProvider示例: ```java public class MyContentProvider extends ContentProvider { private static final int MY_CONTENT = 1; private DatabaseHelper dbHelper; @Override public ...

    Android 中ContentProvider的实例详解

    在Android开发中,ContentProvider是实现应用程序间数据共享的关键组件。它允许一个应用的数据被其他应用访问,即使这些数据存储在私有SQLite数据库、文件系统或其他数据存储方式中。ContentProvider通过统一的接口...

    06_contentprovider

    下面是一个简单的ContentProvider示例,假设我们要共享一个存储联系人信息的数据集: ```java public class SimpleContactProvider extends ContentProvider { private static final UriMatcher sUriMatcher = ...

    ContentProviderDemo.rar

    4. **ContentProvider示例流程** - 在ContentProviderDemo中,首先创建一个表示数据的SQLite数据库,定义数据表结构。 - 创建Contract类,定义Uri常量、列名和数据表名。 - 实现ContentProvider类,覆盖基本操作...

    Android 自定义ContentProvider简单实例

    Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下。 要使用ContentProvider来操作数据,必须要有保存数据的场所。可以使用文件或SQLite...

    android 用ContentProvider操作文件

    4. 示例代码展示了如何在其他应用中通过ContentResolver访问ContentProvider提供的文件。 通过学习和实践这个案例,你可以更好地理解ContentProvider在文件操作和跨应用通信中的应用。同时,也可以根据需求扩展...

    ContentProvider使用方法demo

    实践部分,`ContentProviderDemo1`、`ContentProviderDemo2`和`ContentProviderDemo`可能是包含不同示例代码的Java文件或目录,可能包含以下内容: - `ContentProviderDemo1`:展示基础的ContentProvider实现,包括...

Global site tag (gtag.js) - Google Analytics