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;
}
}
}
分享到:
相关推荐
在Android开发中,...总之,罗升阳的ContentProvider示例是学习Android数据共享机制的重要资源,通过深入研究和实践,我们可以提升在Android平台上的数据管理能力,为开发出更加健壮和高效的移动应用奠定坚实基础。
接下来,我们将创建一个简单的ContentProvider示例: 1. 首先,定义UriMatcher,为不同的操作添加匹配规则,如: ``` UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI(...
本示例程序将深入探讨如何实现一个完整的ContentProvider,包括query、insert、update、delete以及getType方法。 首先,让我们了解ContentProvider的基本结构。一个ContentProvider类需要继承自`android.content....
本示例源代码旨在帮助初学者理解ContentProvider的工作原理及其使用方法。通过分析和实践这个"ContentProviderDemo"项目,我们可以深入学习到以下关键知识点: 1. **ContentProvider基础** - ContentProvider是...
本示例将深入讲解如何创建和使用ContentProvider。 首先,我们来理解ContentProvider的基本概念。ContentProvider是Android提供的一种标准化的数据访问接口,它可以封装各种类型的数据,如SQLite数据库、文件系统、...
5. **ContentProvider示例** 假设我们有一个名为"Contacts"的数据表,包含id, name和phone字段,我们可以这样创建一个简单的ContentProvider: ```java public class MyContactProvider extends ContentProvider...
filecraft-contentprovider-介绍FileCraft ContentProvider 示例 Android 应用程序。 在 Google Play 商店中与 FileCraft 一起使用。 这是示例插件应用程序的早期版本。 随着我更多地测试和使用它,事情可能会发生...
以下是一个简单的ContentProvider示例: ```java public class MyContentProvider extends ContentProvider { private AppDatabase db; @Override public boolean onCreate() { db = Room.databaseBuilder...
以下是一个简单的自定义ContentProvider示例: ```java public class MyProvider extends ContentProvider { private static final String AUTHORITY = "com.example.myprovider"; private static final ...
在Android开发中,ContentProvider是四大组件之一,用于在应用程序之间共享数据。...在`ContentProviderTest`这个案例中,开发者可能已经实现了一个简单的数据库操作的ContentProvider示例,可供学习和参考。
在“TestCP”文件中,很可能是实现了一个具体的ContentProvider示例。这个示例可能包含了创建ContentProvider的步骤,如定义Uri匹配规则(通过UriMatcher)、创建SQLite数据库或数据存储结构,以及上述提到的方法的...
通过这个简单的ContentProvider示例,新手可以快速掌握如何在Android应用之间共享数据。实践是最好的老师,动手尝试编写和使用ContentProvider,将帮助你更好地理解其工作原理和使用场景。ContentProvider在多应用...
以下是一个简单的ContentProvider示例: ```java public class MyContentProvider extends ContentProvider { private static final int MY_CONTENT = 1; private DatabaseHelper dbHelper; @Override public ...
在Android开发中,ContentProvider是实现应用程序间数据共享的关键组件。它允许一个应用的数据被其他应用访问,即使这些数据存储在私有SQLite数据库、文件系统或其他数据存储方式中。ContentProvider通过统一的接口...
下面是一个简单的ContentProvider示例,假设我们要共享一个存储联系人信息的数据集: ```java public class SimpleContactProvider extends ContentProvider { private static final UriMatcher sUriMatcher = ...
4. **ContentProvider示例流程** - 在ContentProviderDemo中,首先创建一个表示数据的SQLite数据库,定义数据表结构。 - 创建Contract类,定义Uri常量、列名和数据表名。 - 实现ContentProvider类,覆盖基本操作...
Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下。 要使用ContentProvider来操作数据,必须要有保存数据的场所。可以使用文件或SQLite...
4. 示例代码展示了如何在其他应用中通过ContentResolver访问ContentProvider提供的文件。 通过学习和实践这个案例,你可以更好地理解ContentProvider在文件操作和跨应用通信中的应用。同时,也可以根据需求扩展...
实践部分,`ContentProviderDemo1`、`ContentProviderDemo2`和`ContentProviderDemo`可能是包含不同示例代码的Java文件或目录,可能包含以下内容: - `ContentProviderDemo1`:展示基础的ContentProvider实现,包括...