android ContentProvider
来源:互联网 发布:南京连天美正规吗 知乎 编辑:程序博客网 时间:2024/05/29 02:19
android ContentProvider 用法
//1 构建类 继承ContentProvider
public class MyContentProvider extends ContentProvider{
//2实现相关方法:onCreate,query,getType,insert,delete,update 分别实现增删改查等数据库操作
//3 初始化相关属性
private static final String URI_AUTHORITY = "com.tianqi2345.contentprovider1";
public static final String URI_PATH = "RecordSet"; // 只是填充,没有作用
public static final String URI_PATH2 = "RecordSet/#";// 只是填充,没有作用
public static final String URI_INSERT = "RecordInsert"; // 只是填充,没有作用
public static final String URI_DELETE = "RecordDelete/#";
public static final String URI_UPDATE = "Update/#";
private static final UriMatcher sMatcher;
public static final int ALL_EVENT_RECORDS = 0;
public static final int ONE_Event_RECORD = 1;
public static final int ONE_INSERT = 2;
public static final int ONE_DELETE = 3;
public static final int UPDATE_DATA = 4;
// 静态域初始化静态变量,设置匹配URI
static {
sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sMatcher.addURI(URI_AUTHORITY, URI_PATH2, ONE_Event_RECORD);
sMatcher.addURI(URI_AUTHORITY, URI_PATH, ALL_EVENT_RECORDS);
sMatcher.addURI(URI_AUTHORITY, URI_INSERT, ONE_INSERT);
sMatcher.addURI(URI_AUTHORITY, URI_DELETE, ONE_DELETE);
sMatcher.addURI(URI_AUTHORITY, URI_UPDATE, UPDATE_DATA);
}
//上下文变量
private Context mContext;
@Override
public boolean onCreate() {
mContext = getContext();
return true;
}
//查询
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
int match = sMatcher.match(uri);
Cursor cur = null;
//根据uri区分查询类型
switch (match) {
case ALL_EVENT_RECORDS:
//查询所有内容
cur = loadAllCalendarEvent(this);
break;
case ONE_Event_RECORD:
//根据id和条件查询指定内容
cur = loadCalendarEvent(this, ContentUris.parseId(uri), uri,
projection, selection, selectionArgs, sortOrder);
break;
default:
break;
}
return cur;
}
private Cursor loadCalendarEvent(MyContentProvider myContentProvider,
long parseId, Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// 客户端传来查询字符串,搜索条件以及排序条件,提供者根据条件查询数据库表返回结果
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String where = "_id = " + parseId;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
Cursor cu = db.query("citys", projection, where, selectionArgs, null,
null, sortOrder);
return cu;
}
private Cursor loadAllCalendarEvent(MyContentProvider calendarProvider) {
try {
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from citys", null);
return cursor;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
//插入操作
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Uri insertUri = null;
int match = sMatcher.match(uri);
if (match == ONE_INSERT) {
// 插入一个字段
long rowid = db.insert("citys", null, values);
insertUri = ContentUris.withAppendedId(uri, rowid);
} else {
insertUri = null;
}
return insertUri;
}
//删除操作
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
int count = 0;
if (sMatcher.match(uri) == ONE_DELETE) {
// 提取出id部分
long id = ContentUris.parseId(uri);
String where = "_id = " + id;
// 如果用户delete里面传递了参数,判断参数如果存在就拼起来
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
count = db.delete("citys", where, selectionArgs);
}
return count;
}
//修改操作
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int count = 0;
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
if (sMatcher.match(uri) == UPDATE_DATA) {
long id = ContentUris.parseId(uri);
String where = "_id = " + id;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
count = db.update("citys", values, where, selectionArgs);
} else {
count = 0;
}
return count;
}
}
4 在xml中注册ContentProvider
//类名,uri
<provider
android:name="com.tianqi2345.contentprovider.MyContentProvider"
android:authorities="com.tianqi2345.contentprovider1" >
</provider>
客户端访问ContentProvider
1 带参数查询指定id和条件的内容
private void queryContentProvider(MainActivity mainActivity, int i) {
//uri通常有唯一报名和条件组成
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordSet/" + 0);
Cursor cursor = getContentResolver().query(uri, null, "_id=?",
new String[] { "0" }, null);
Log.e("LXL", "count = " + cursor.getCount());
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(0)));
String name = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1)));
String name2 = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(2)));
Log.e("result data: ", id + "," + name + "," + name2);
}
}
//查询所有内容,不含参数
private void queryContentProvider(MainActivity mainActivity) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordSet");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
Log.e("LXL", "count = " + cursor.getCount());
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(0)));
String name = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1)));
String name2 = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(2)));
Log.e("result data: ", id + "," + name + "," + name2);
}
}
//修改指定数据
private void updateContentProvider(MainActivity mainActivity, int i) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/Update/" + 12);
ContentValues values = new ContentValues();
values.put("areaId", "111");
values.put("pinyin", "dongjie");
values.put("py", "dj");
values.put("areaName", "dongjie");
values.put("cityName", "dongjie");
values.put("provinceName", "dongjie");
int count = getContentResolver().update(uri, values, null, null);
Log.e("LXL", "count="+count);
}
//删除指定数据
private void deleteContentProvider(MainActivity mainActivity, int i) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordDelete/" + 12);
getContentResolver().delete(uri, null, null);
}
//插入指定数据
private void insertContentProvider(MainActivity mainActivity) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordInsert");
ContentValues values = new ContentValues();
// areaId integer, pinyin text, py text, areaName text, cityName text,
// provinceName text
values.put("areaId", "111");
values.put("pinyin", "dongjie");
values.put("py", "dj");
values.put("areaName", "dongjie");
values.put("cityName", "dongjie");
values.put("provinceName", "dongjie");
Uri ui = getContentResolver().insert(uri, values);
Log.e("LXL", "" + ui);
}
//1 构建类 继承ContentProvider
public class MyContentProvider extends ContentProvider{
//2实现相关方法:onCreate,query,getType,insert,delete,update 分别实现增删改查等数据库操作
//3 初始化相关属性
private static final String URI_AUTHORITY = "com.tianqi2345.contentprovider1";
public static final String URI_PATH = "RecordSet"; // 只是填充,没有作用
public static final String URI_PATH2 = "RecordSet/#";// 只是填充,没有作用
public static final String URI_INSERT = "RecordInsert"; // 只是填充,没有作用
public static final String URI_DELETE = "RecordDelete/#";
public static final String URI_UPDATE = "Update/#";
private static final UriMatcher sMatcher;
public static final int ALL_EVENT_RECORDS = 0;
public static final int ONE_Event_RECORD = 1;
public static final int ONE_INSERT = 2;
public static final int ONE_DELETE = 3;
public static final int UPDATE_DATA = 4;
// 静态域初始化静态变量,设置匹配URI
static {
sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sMatcher.addURI(URI_AUTHORITY, URI_PATH2, ONE_Event_RECORD);
sMatcher.addURI(URI_AUTHORITY, URI_PATH, ALL_EVENT_RECORDS);
sMatcher.addURI(URI_AUTHORITY, URI_INSERT, ONE_INSERT);
sMatcher.addURI(URI_AUTHORITY, URI_DELETE, ONE_DELETE);
sMatcher.addURI(URI_AUTHORITY, URI_UPDATE, UPDATE_DATA);
}
//上下文变量
private Context mContext;
@Override
public boolean onCreate() {
mContext = getContext();
return true;
}
//查询
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
int match = sMatcher.match(uri);
Cursor cur = null;
//根据uri区分查询类型
switch (match) {
case ALL_EVENT_RECORDS:
//查询所有内容
cur = loadAllCalendarEvent(this);
break;
case ONE_Event_RECORD:
//根据id和条件查询指定内容
cur = loadCalendarEvent(this, ContentUris.parseId(uri), uri,
projection, selection, selectionArgs, sortOrder);
break;
default:
break;
}
return cur;
}
private Cursor loadCalendarEvent(MyContentProvider myContentProvider,
long parseId, Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// 客户端传来查询字符串,搜索条件以及排序条件,提供者根据条件查询数据库表返回结果
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String where = "_id = " + parseId;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
Cursor cu = db.query("citys", projection, where, selectionArgs, null,
null, sortOrder);
return cu;
}
private Cursor loadAllCalendarEvent(MyContentProvider calendarProvider) {
try {
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from citys", null);
return cursor;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
//插入操作
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Uri insertUri = null;
int match = sMatcher.match(uri);
if (match == ONE_INSERT) {
// 插入一个字段
long rowid = db.insert("citys", null, values);
insertUri = ContentUris.withAppendedId(uri, rowid);
} else {
insertUri = null;
}
return insertUri;
}
//删除操作
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
int count = 0;
if (sMatcher.match(uri) == ONE_DELETE) {
// 提取出id部分
long id = ContentUris.parseId(uri);
String where = "_id = " + id;
// 如果用户delete里面传递了参数,判断参数如果存在就拼起来
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
count = db.delete("citys", where, selectionArgs);
}
return count;
}
//修改操作
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int count = 0;
SQLiteOpenHelper dbHelper = new SqliteDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
if (sMatcher.match(uri) == UPDATE_DATA) {
long id = ContentUris.parseId(uri);
String where = "_id = " + id;
if (selection != null && !"".equals(selection)) {
where = where + " and " + selection;
}
count = db.update("citys", values, where, selectionArgs);
} else {
count = 0;
}
return count;
}
}
4 在xml中注册ContentProvider
//类名,uri
<provider
android:name="com.tianqi2345.contentprovider.MyContentProvider"
android:authorities="com.tianqi2345.contentprovider1" >
</provider>
客户端访问ContentProvider
1 带参数查询指定id和条件的内容
private void queryContentProvider(MainActivity mainActivity, int i) {
//uri通常有唯一报名和条件组成
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordSet/" + 0);
Cursor cursor = getContentResolver().query(uri, null, "_id=?",
new String[] { "0" }, null);
Log.e("LXL", "count = " + cursor.getCount());
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(0)));
String name = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1)));
String name2 = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(2)));
Log.e("result data: ", id + "," + name + "," + name2);
}
}
//查询所有内容,不含参数
private void queryContentProvider(MainActivity mainActivity) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordSet");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
Log.e("LXL", "count = " + cursor.getCount());
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(0)));
String name = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1)));
String name2 = cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(2)));
Log.e("result data: ", id + "," + name + "," + name2);
}
}
//修改指定数据
private void updateContentProvider(MainActivity mainActivity, int i) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/Update/" + 12);
ContentValues values = new ContentValues();
values.put("areaId", "111");
values.put("pinyin", "dongjie");
values.put("py", "dj");
values.put("areaName", "dongjie");
values.put("cityName", "dongjie");
values.put("provinceName", "dongjie");
int count = getContentResolver().update(uri, values, null, null);
Log.e("LXL", "count="+count);
}
//删除指定数据
private void deleteContentProvider(MainActivity mainActivity, int i) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordDelete/" + 12);
getContentResolver().delete(uri, null, null);
}
//插入指定数据
private void insertContentProvider(MainActivity mainActivity) {
Uri uri = Uri
.parse("content://com.tianqi2345.contentprovider1/RecordInsert");
ContentValues values = new ContentValues();
// areaId integer, pinyin text, py text, areaName text, cityName text,
// provinceName text
values.put("areaId", "111");
values.put("pinyin", "dongjie");
values.put("py", "dj");
values.put("areaName", "dongjie");
values.put("cityName", "dongjie");
values.put("provinceName", "dongjie");
Uri ui = getContentResolver().insert(uri, values);
Log.e("LXL", "" + ui);
}
0 0
- 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 contentprovider
- 一个男人关心的东西 决定了他……
- 户,对清理功能的喜好也有很大差别。比如,中国APP的商业环境最复
- 经典面试程序前言-简历的撰写
- Redis客户端——Jedis使用
- Go 语言简介
- android ContentProvider
- jsp+servlet+javaBean+mysql (MVC)模拟用户登录
- android 常用功能组件——TimerTask
- Java项目经验
- 值传递、引用传递的区别
- Android与JSP后台服务器交互demo
- Centos安装GDB,并查看GDB安装路径
- 擦拭机场接撒谎就出发时间长符合按时感受到
- 【LeetCode】Unique Paths I && II && Minimum Path Sum