Android开发之路十三-----------ContentProvider连接
来源:互联网 发布:ubuntu 任务栏不见 编辑:程序博客网 时间:2024/03/29 20:07
ContentProvider
1、PersonProvider
package cn.class3g.db;
import cn.class3g.service.DatabaseHelper;
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 PersonProvider extends ContentProvider {
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
private static final int PERSONS = 1;
private static final int PERSON = 2;
private DatabaseHelper dbHelper;
static {
matcher.addURI("cn.class3g.providers.personprovider", "person", PERSONS);
matcher.addURI("cn.class3g.providers.personprovider", "person/#",
PERSON);
}
public boolean onCreate() {
dbHelper = new DatabaseHelper(this.getContext());
return true;
}
// content://cn.itcast.provides.personprovider/person
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
long rowId;
switch (matcher.match(uri)) {
case PERSONS: //向表中添加新纪录并返回其行号
rowId = db.insert("person", "personid", values);
return ContentUris.withAppendedId(uri, rowId);
default:
throw new IllegalArgumentException("Unknow Uri:" + uri);
}
}
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbHelper.getReadableDatabase();
switch (matcher.match(uri)) {
case PERSONS:
return db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
case PERSON:
long personid = ContentUris.parseId(uri);
String where = "personid="+ personid;
if(selection!=null && !"".equals(selection)){
where = where + " and "+ selection;
}
return db.query("person", projection, where, selectionArgs, null, null, sortOrder);
default:
throw new IllegalArgumentException("Unknown Uri:"+ uri);
}
}
// content://cn.itcast.provides.personprovider/person 更新表中的所有记录
// content://cn.itcast.provides.personprovider/person/10 更新表中指定id的记录
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
int num;
switch(matcher.match(uri)){
case PERSONS: //更新指定记录
num = db.update("person", values, selection, selectionArgs);
break;
case PERSON:
long personid = ContentUris.parseId(uri);
String where = "personid=" + personid;
if(selection != null){
where += " and " + selection;
}
num = db.update("person", values, where, selectionArgs);
break;
default:
throw new IllegalArgumentException("Unknow Uri"+uri);
}
return num;
}
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
int num = 0;
switch (matcher.match(uri)) {
case PERSONS:
num = db.delete("person", selection, selectionArgs);
break;
case PERSON:
long personid = ContentUris.parseId(uri);
String where = "personid="+ personid;
if(selection!=null && !"".equals(selection)){
where = where + " and "+ selection;
}
num = db.delete("person", where, selectionArgs);
break;
default:
throw new IllegalArgumentException("Unknown Uri:"+ uri);
}
return num;
}
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case PERSONS:
return "vnd.android.cursor.dir/person";
case PERSON:
return "vnd.android.cursor.item/person";
default:
throw new IllegalArgumentException("Unknown Uri:"+ uri);
}
}
}
2、配置
<provider
android:authorities="cn.class3g.providers.personprovider"
android:name="PersonProvider" >
</provider>
3、建立测试工程编写测试代码
package cn.class3g.visitor;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;
public class AccessContentProviderTest extends AndroidTestCase {
public void testSave() throws Throwable{
ContentResolver resolver = this.getContext().getContentResolver();
Uri insertUri = Uri.parse("content://cn.class3g.providers.personprovider/person");
ContentValues values = new ContentValues();
values.put("name", "laozhang");
values.put("age", "50");
Uri uri = resolver.insert(insertUri, values);
Log.i("TAG", uri.toString());
}
public void testQuery() throws Throwable{
ContentResolver resolver = this.getContext().getContentResolver();
Uri uri = Uri.parse("content://cn.class3g.providers.personprovider/person");
Cursor cursor = resolver.query(uri, null,null, null, "personid asc");
while(cursor.moveToNext()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.i("TAG", "personid="+ personid + ",name="+ name);
}
cursor.close();
}
public void testUpdate() throws Throwable{
ContentResolver contentResolver = this.getContext().getContentResolver();
Uri updateUri = Uri.parse("content://cn.class3g.providers.personprovider/person/5");
ContentValues values = new ContentValues();
values.put("name", "蒋介石");
contentResolver.update(updateUri, values, null,null);
}
public void testDelete() throws Throwable{
ContentResolver contentResolver = this.getContext().getContentResolver();
Uri uri = Uri.parse("content://cn.class3g.providers.personprovider/person/5");
contentResolver.delete(uri, null, null);
}
}
4、测试(注意需要先将provider拥有者工程部署到设备上)
5、ContentProvider的监听器
- Android开发之路十三-----------ContentProvider连接
- Android开发之ContentProvider
- Android开发之ContentProvider
- Android开发之ContentProvider初步
- Android应用开发之ContentProvider
- Android开发之ContentProvider详解
- Android开发之ContentProvider详解
- Android 开发之 ContentProvider 内容提供者
- Android开发之ContentProvider的应…
- Android开发之实现自己的ContentProvider
- Android应用开发学习笔记之ContentProvider
- android开发笔记之ContentProvider使用样例一
- android开发笔记之ContentProvider使用样例二
- Android开发之内容提供者ContentProvider
- Android 开发之ContentProvider 基础学习
- Android开发之ContentProvider对联系人操作
- (转)Android开发之ContentProvider详解
- [Android开发] RxJava2之路十三-阻塞操作例子Demo
- 报告显示移动开发者更钟爱iOS平台
- send,recv,sendto,recvfrom
- Android开发之路十二-----------SQLite数据库
- 悲催的Java Coder
- ASP.NET页面间数据传递的方法
- Android开发之路十三-----------ContentProvider连接
- 开心网为何不再开心了
- Javascript内存管理
- 第三章 java基本的程序设计结构
- Android模拟器中运行纯C++程序(一)
- 什么是J2EE、Java SE、Java EE、Java ME?
- 数据挖掘-----算法描述 层次聚类
- 我国北斗卫星导航系统今日起试运行
- 杂谈腾讯微信的崛起