当外部应用要对ContentProvider中的数据进行操作的时候,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用activity的getContentResolver方法。
contentResolver类提供了与contentProvider相同签名的四个方法
public Uri insert(URI uri,ContentValues values); 这个方法用于添加数据
public int delete(Uri uri,String selection,String[] selectionArgs) 这个方法用于删除数据
public int update(Uri uri,ContentValues values,String selection,Stringp[] selectionArgs) 更新方法
下面用查询方法详细举例
public class PersonProvider extends ContentProvider {
private static final String TAG = "PersonContentProvider";
DBOpenHelper dbHelper;
private static final int PERSONLIST = 1;
private static final int PERSON = 2;
private static UriMatcher matcher;
static{
matcher = new UriMatcher(UriMatcher.NO_MATCH);
matcher.addURI("cn.itcast.provider.PersonProvider", "person", PERSONLIST);
matcher.addURI("cn.itcast.provider.PersonProvider", "person/#", PERSON);
}
@Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case PERSONLIST://获取所有记录 就是这样规定的 多条记录返回这个
return "vnd.android.cursor.dir/personprovider.person";
case PERSON://获取单条记录 单条记录返回那个
return "vnd.android.cursor.item/personprovider.person";
default:
throw new IllegalArgumentException("Uri IllegalArgument:"+ uri);
}
}
@Override
public boolean onCreate() {
dbHelper = new DBOpenHelper(this.getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
//获取数据库操作的类
SQLiteDatabase db = dbHelper.getReadableDatabase();
//声明一个游标
Cursor cursor = null;
switch (matcher.match(uri)) {
case PERSONLIST://获取所有记录
//cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
cursor = db.rawQuery("select * from person ", null);
break;
case PERSON://获取单条记录
long personid = ContentUris.parseId(uri);
String where = selection!=null && !"".equals(selection.trim()) ? selection+ " and personid="+ personid : "personid="+ personid;
cursor = db.query("person", projection, where, selectionArgs, null, null, sortOrder);
break;
default:
//如果什么都没有找到,就抛出一个异常。
throw new IllegalArgumentException("Uri IllegalArgument:"+ uri);
}
//这里还有一个悬而未决的问题,就是如果这里关闭了数据库的话,外面想查找这些数据时没法完成的,所以数据库打开后就一直没有关闭,个人认为也没什么影响,手机毕竟是单机操作,而且数据库性能很好,多开个东西没关系的。
//db.close();
return cursor;
}
分享到:
相关推荐
1、建议新手读者在学完SqLite之后再来学习ContentResolver的内容,ContentResolver的insert(),delete(),updata(),query四个操作数据库的方法均与SQLite中的相同。 2、ContentProvider的Uri,以及该ContentProvider所...
3. 学习ContentResolver的使用,理解如何构建URI、创建ContentValues对象以进行数据操作。 4. 理解Cursor的工作原理,如何通过Cursor获取数据并进行遍历。 5. 实践跨应用数据共享,模拟两个应用之间通过...
在Android系统中,`ContentResolver` 是一个至关重要的组件,它作为应用程序与系统服务之间...通过学习和实践`ContentResolverDemo5.9`,开发者可以更好地掌握如何高效地使用`ContentResolver`来实现跨应用的数据交互。
此外,我们还学习了如何创建和使用上下文菜单,以及如何处理ListView的点击事件。这次实验不仅提升了对Android编程的理解,也增强了代码阅读和错误调试能力,对于理解Android四大组件之一的ContentProvider及其与...
在安卓开发中,ContentResolver是Android系统提供的一种接口,用于与内容提供者(Content Provider)进行交互,从而访问和管理...通过深入学习和实践,可以扩展到更复杂的场景,如搜索联系人、处理多个数据表的关联等。
在Android系统中,获取手机联系人信息是常见的需求,这通常涉及到...在ContentProivder_APP这个项目中,可能包含了实现这一功能的示例代码,通过学习和分析这些代码,开发者可以更好地理解和实践上述知识。
在Android开发中,`ContentResolver` 是一个至关重要的组件,它负责应用程序与系统服务之间的数据交互,特别是涉及到数据存储和检索的时候。`ContentResolverDemo` 项目作为一个开源示例,旨在帮助开发者理解如何...
程序例子包含了2个独立的Android程序,其中一个负责提供数据并提供本地操作,另外一个可以跨进程访问提供者提供的数据。...由于没有其他多余的代码,功能针对性很强,是学习Android跨进程数据共享的入门助手。
在Android系统中,通讯录是应用之间共享数据的重要机制,这一功能主要依赖于ContentProvider和...对于"AddressBook"这样的项目,我们可以学习如何设计和实现一个完整的通讯录系统,包括数据存储、UI展示以及数据操作。
通过分析和学习这篇博客的源码,开发者可以了解到如何在实际项目中实现一个完整的ContentProvider,从而实现数据库数据的安全共享。这不仅有助于提升开发者的技能,还能在多应用数据共享场景下提供有效的解决方案。...
收集的一些关于Android的学习资料,一些常用组件的介绍,和一些难点的资料.包括:android gravity 和 android layout_Gravity,Bundle,ContentResolver,cursor,Fragments ,Fragments,inflater ,Fragment,数据查询query...
学习笔记可能包含了一些实际的编程示例,如创建一个简单的应用,展示如何使用ContentResolver和ContactsContract来显示、编辑或删除联系人。这样的实践有助于巩固理论知识,并提升实际开发能力。 总结,这篇...
在Android中,通常建议使用ContentResolver和Uri来与SQLite交互,特别是在涉及到ContentProvider的情况。 文件“JavaApk源码说明.txt”可能包含了对源码的解释,这将有助于理解如何在实际项目中应用SQLite。源码...
5. **使用MediaStore**:可能的例子是将录制的媒体文件插入到MediaStore,以便用户可以通过系统的媒体库访问,或者通过ContentResolver查询录制文件的信息。 在`TestMedia`这个文件中,可能包含了实现以上操作的...
`LoadSQLiteManager-master`这个压缩包文件可能包含了完整的项目源代码,你可以通过阅读和学习这些代码,进一步了解如何将这些组件结合在一起,实现高效的数据库异步加载。在实际开发中,这样的设计模式有助于提高...
在"Pro Android学习:联系人API"中,我们将深入探讨这些关键知识点。 首先,Android的联系人API分为两大部分:原始联系人API(Legacy Contact API)和ContactsContract API。前者主要用于Android 2.3(Gingerbread...
1. 获取ContentResolver:通过Activity或Context的getContentResolver()方法获取ContentResolver对象,这是与ContentProvider交互的主要工具。 2. 数据操作:利用ContentResolver执行对数据的操作,包括: - 查询...
Android的`ContentResolver`和`Uri`用于访问外部存储中的多媒体文件。`MediaStore`提供了一个数据库,用于管理和检索媒体文件,如照片和音乐。 通过研究这个压缩包中的示例代码,开发者可以熟悉以上所有概念,并...
总之,`ContentResolverDemo`这个项目为开发者提供了一个学习如何在Android应用中有效利用`ContentResolver`与系统数据交互的实例。通过深入理解`ContentResolver`的工作原理和使用技巧,开发者可以更好地设计和实现...
罗升阳,被誉为Android开发的大神,他的代码示例往往深入浅出,易于理解,是许多开发者学习Android技术的重要参考。在这个压缩包中,我们可以看到与ContentProvider相关的三个主要元素:`ContentProvider`、`...