ContentProvider实现跨程序数据共享,实例如下:
数据库基于数据存储中的使用的数据库,点击Here
1】ContentProvider类

public class ContentProvider extends android.content.ContentProvider {private static final int BOOK_DIR = 0;private static final int BOOK_ITEM = 1;private static final int CATEGORY_DIR = 2;private static final int CATEGORY_ITEM = 3;private static final String AUTHORITY = "com.example.android.provider";private static UriMatcher mUriMatcher;private MyDatabaseHelper mHelper;static {mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);mUriMatcher.addURI(AUTHORITY, "book", BOOK_DIR);mUriMatcher.addURI(AUTHORITY, "book/#", BOOK_ITEM);mUriMatcher.addURI(AUTHORITY, "category", CATEGORY_DIR);mUriMatcher.addURI(AUTHORITY, "category/#", CATEGORY_ITEM);}@Overridepublic boolean onCreate() {mHelper = new MyDatabaseHelper(getContext(), "BookStore.db", null, 4);return true;}@Nullable@Overridepublic Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {SQLiteDatabase db = mHelper.getWritableDatabase();Cursor cursor = null;switch (mUriMatcher.match(uri)) {case BOOK_DIR:cursor = db.query("Book", projection, selection, selectionArgs, null, null, sortOrder);break;case BOOK_ITEM:String bookId = uri.getPathSegments().get(1);cursor = db.query("Book", projection, "id=?", new String[]{bookId}, null, null, sortOrder);break;case CATEGORY_DIR:cursor = db.query("Category", projection, selection, selectionArgs, null, null, sortOrder);break;case CATEGORY_ITEM:String categoryId = uri.getPathSegments().get(1);cursor = db.query("Category", projection, "id=?", new String[]{categoryId}, null, null, sortOrder);break;default:break;}return cursor;}@Nullable@Overridepublic String getType(@NonNull Uri uri) {switch (mUriMatcher.match(uri)) {case BOOK_DIR:return "vnd.android.cursor.dir/vnd.com.example.android.provider.book";case BOOK_ITEM:return "vnd.android.cursor.item/vnd.com.example.android.provider.book";case CATEGORY_DIR:return "vnd.android.cursor.dir/vnd.com.example.android.provider.category";case CATEGORY_ITEM:return "vnd.android.cursor.item/vnd.com.example.android.provider.category";default:break;}return null;}@Nullable@Overridepublic Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {SQLiteDatabase db = mHelper.getWritableDatabase();Uri uriRe = null;switch (mUriMatcher.match(uri)) {case BOOK_DIR:case BOOK_ITEM:long newBookId = db.insert("Book", null, values);uriRe = Uri.parse("context://" + AUTHORITY + "/book" + newBookId);break;case CATEGORY_DIR:case CATEGORY_ITEM:long newCategoryId = db.insert("Category", null, values);uriRe = Uri.parse("context://" + AUTHORITY + "/category" + newCategoryId);break;default:break;}return uriRe;}@Overridepublic int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {SQLiteDatabase db = mHelper.getWritableDatabase();int deleteRows = 0;switch (mUriMatcher.match(uri)) {case BOOK_DIR:deleteRows = db.delete("Book", selection, selectionArgs);break;case BOOK_ITEM:String bookId = uri.getPathSegments().get(1);deleteRows = db.delete("Book", "id=?", new String[]{bookId});break;case CATEGORY_DIR:deleteRows = db.delete("Category", selection, selectionArgs);break;case CATEGORY_ITEM:String categoryId = uri.getPathSegments().get(1);deleteRows = db.delete("Category", "id=?", new String[]{categoryId});break;}return deleteRows;}@Overridepublic int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {SQLiteDatabase db = mHelper.getWritableDatabase();int updateRows = 0;switch (mUriMatcher.match(uri)) {case BOOK_DIR:updateRows = db.update("Book", values, selection, selectionArgs);break;case BOOK_ITEM:String bookId = uri.getPathSegments().get(1);updateRows = db.update("Book", values, "id=?", new String[]{bookId});break;case CATEGORY_DIR:updateRows = db.update("Category", values, selection, selectionArgs);break;case CATEGORY_ITEM:String categoryId = uri.getPathSegments().get(1);updateRows = db.update("Category", values, "id=?", new String[]{categoryId});break;}return updateRows;}
}

2】实现增删改查
查询数据

private void queryData() {Uri uri = Uri.parse(AGREE + AUTHORITY + CATEGORY);Cursor cursor = getContentResolver().query(uri, null, null, null, null, null);if (cursor != null) {while (cursor.moveToNext()) {// 遍历Cursor对象,取出数据并打印String category_name = cursor.getString(cursor.getColumnIndex("category_name"));String category_code = cursor.getString(cursor.getColumnIndex("category_code"));Log.d(TAG, "book name is " + category_name);Log.d(TAG, "book author is " + category_code);}}cursor.close();}

更新数据

private void updateData() {Uri uri = Uri.parse(AGREE + AUTHORITY + CATEGORY);ContentValues values = new ContentValues();values.put("category_name", "科幻类");values.put("category_code", 66);getContentResolver().update(uri, values, "category_name=?", new String[]{"科幻类"});}

删除数据

private void deleteData() {Uri uri = Uri.parse(AGREE + AUTHORITY + CATEGORY + "/" + newId);getContentResolver().delete(uri, null, null);}

添加数据

private void InsertData() {Uri uri = Uri.parse(AGREE + AUTHORITY + CATEGORY);ContentValues values = new ContentValues();values.put("category_name", "科幻类");values.put("category_code", 11);Uri newUri = getContentResolver().insert(uri, values);newId = newUri.getPathSegments().get(1);}

运行结果,查询数据pass,其他操作failed

Android【ContentProvider案例】相关推荐

  1. 《Android 应用案例开发大全(第二版)》——2.6节绘制相关类

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.6节绘制相关类 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步 ...

  2. 《Android 应用案例开发大全(第二版)》——6.1节Android系统的信使:Intent

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第6章,第6.1节Android系统的信使:Intent ,作者李宁,更多章节内容可以访问云栖社区"异步 ...

  3. Android ContentProvider支持跨进程数据共享与互斥、同步 杂谈

    在开发中,假如,A.B进程有部分信息需要同步,这个时候怎么处理呢?设想这么一个场景,有个业务复杂的Activity非常占用内存,并引发OOM,所以,想要把这个Activity放到单独进程,以保证OOM ...

  4. 《Android 应用案例开发大全(第二版)》——导读

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的目录 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  5. Android 系统性能优化(43)---Android OOM案例分析

    Android OOM案例分析 在Android(Java)开发中,基本都会遇到java.lang.OutOfMemoryError(本文简称OOM),这种错误解决起来相对于一般的Exception或 ...

  6. 《Android开发案例驱动教程》

    <Android开发案例驱动教程> 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式展开讲解知识点,即介绍案例->案例涉及技术->展开 ...

  7. 《Android 应用案例开发大全(第二版)》——2.3节案例的基本框架

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.3节案例的基本框架 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区" ...

  8. 《Android 应用案例开发大全(第3版)》——第2章,第2.8节壁纸中的着色器开发...

    本节书摘来自异步社区<Android 应用案例开发大全(第3版)>一书中的第2章,第2.8节壁纸中的着色器开发,作者 吴亚峰 , 苏亚光 , 于复兴,更多章节内容可以访问云栖社区" ...

  9. 《Android 应用案例开发大全(第二版)》——1.5节第一个Android程序——Hello Android...

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第1章,第1.5节第一个Android程序--Hello Android ,作者 吴亚峰 , 于复兴 , 杜化美, ...

  10. 《Android 应用案例开发大全(第3版)》——第2.1节壁纸的背景及功能概述

    本节书摘来自异步社区<Android 应用案例开发大全(第3版)>一书中的第2章,第2.1节壁纸的背景及功能概述,作者 吴亚峰 , 苏亚光 , 于复兴,更多章节内容可以访问云栖社区&quo ...

最新文章

  1. 【C语言运算符大全】快速学会C语言运算符
  2. linux中cat more less head tail 命令区别
  3. PHP_Mysql注入防护与绕过
  4. ActiveMQ_使用经验
  5. 如何从开始掌控会议?
  6. Jquery CheckBox全选方法
  7. Zabbix2.2.6邮件报警设置方法
  8. 调节pycharm字体大_字体美化大师里的字体推荐
  9. LEADTOOLS v19试用版安装指南图文详解
  10. 遗传算法解决车辆路径问题
  11. python中的sort和sorted是什么意思_python中sort和sorted的另类用法
  12. mysql 查询结果作为参数_如何将数据库查询出来的字段值作为参数传入下一个请求中...
  13. vue react 写法区别
  14. android qq勋章墙实现,科技教程:如何在手机QQ中进入勋章墙?
  15. 谈谈百度竞价的一些思路
  16. netty报错 io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
  17. el-table表头自定义总计
  18. 打开keil提示未安装xx器件包,实际上已经安装
  19. Android视频 录制视频被拉伸解决方案
  20. Ubuntu 键盘鼠标失效解决办法

热门文章

  1. Unity/VS/C#Unity工程加密授权开发---LicenseProj
  2. Unity2020使用Steam VR开发HTC VIVE Cosmos
  3. Linux学习-X Server 配置文件解析与设定 显示器参数微调
  4. [推荐]OpenERP开发笔记(5) -- 自定义模块开发之一
  5. PhpStorm的主题和字体设置
  6. 影响力(转拆书包精华)
  7. 计算机无法使用标准账号,win10标准账户为何打不开其他应用
  8. FlexBoxlayout在项目的使用总结
  9. 证书是浮云,神马才给力!
  10. 使用 Java Mail 实现注册时邮箱激活验证功能