ContentProvider实现流程
![](/assets/blank.gif)
![](/assets/blank.gif)
1 public class DataBaseContentProvider extends ContentProvider { 2 3 private SQLiteOpenHelper mSQLiteOpenHelper; 4 5 private SQLiteDatabase db; 6 /** 7 * URI 8 */ 9 private static final UriMatcher URIMATCHER = new UriMatcher( 10 UriMatcher.NO_MATCH); 11 12 private static final int URI_MATCH_USER = 0; 13 14 private static final int URI_MATCH_FRIEND = 1; 15 16 private static final int URI_MATCH_TALK = 2; 17 18 private static final int URI_MATCH_COMMENT = 3; 19 20 private static final int URI_MATCH_ALARM = 4; 21 22 static { 23 URIMATCHER.addURI(Constants.AUTHORITY, FriendTable.TABLE_NAME, 24 URI_MATCH_FRIEND); 25 26 URIMATCHER.addURI(Constants.AUTHORITY, UserTable.TABLE_NAME, 27 URI_MATCH_USER); 28 29 URIMATCHER.addURI(Constants.AUTHORITY, TalkTable.TABLE_NAME, 30 URI_MATCH_TALK); 31 32 URIMATCHER.addURI(Constants.AUTHORITY, CommentTable.TABLE_NAME, 33 URI_MATCH_COMMENT); 34 35 URIMATCHER.addURI(Constants.AUTHORITY,AlarmTable.TABLE_NAME, 36 URI_MATCH_ALARM); 37 38 } 39 40 @Override 41 public boolean onCreate() { 42 // TODO Auto-generated method stub 43 mSQLiteOpenHelper = DataBaseHelper.getInstance(getContext()); 44 db = mSQLiteOpenHelper.getWritableDatabase(); 45 return true; 46 } 47 48 /** 49 * 返回要查询的表名 50 */ 51 private String getTableNameByUri(Uri uri) { 52 if (uri == null) { 53 return null; 54 } 55 int match = URIMATCHER.match(uri); 56 switch (match) { 57 case URI_MATCH_USER: 58 return UserTable.TABLE_NAME; 59 60 case URI_MATCH_FRIEND: 61 return FriendTable.TABLE_NAME; 62 63 case URI_MATCH_TALK: 64 return TalkTable.TABLE_NAME; 65 66 case URI_MATCH_COMMENT: 67 return CommentTable.TABLE_NAME; 68 69 case URI_MATCH_ALARM: 70 return AlarmTable.TABLE_NAME; 71 72 default: 73 throw new IllegalArgumentException( 74 "DataBaseContentProvider getTableNameByUri"); 75 } 76 } 77 78 @Override 79 public int delete(Uri url, String where, String[] whereArgs) { 80 // TODO Auto-generated method stub 81 int match = URIMATCHER.match(url); 82 if (match == UriMatcher.NO_MATCH) { 83 throw new IllegalArgumentException("Unknown URL"); 84 } 85 86 int count = db.delete(getTableNameByUri(url), where, whereArgs); 87 ContentResolver cr = getContext().getContentResolver(); 88 cr.notifyChange(url, null); 89 return count; 90 } 91 92 @Override 93 public String getType(Uri arg0) { 94 // TODO Auto-generated method stub 95 96 switch (URIMATCHER.match(arg0)) { 97 case URI_MATCH_USER: 98 return UserTable.CONTENT_TYPE; 99 case URI_MATCH_FRIEND: 100 return FriendTable.CONTENT_TYPE; 101 case URI_MATCH_TALK: 102 return TalkTable.CONTENT_TYPE; 103 case URI_MATCH_COMMENT: 104 return CommentTable.CONTENT_TYPE; 105 case URI_MATCH_ALARM: 106 return AlarmTable.CONTENT_TYPE; 107 default: 108 throw new IllegalArgumentException( 109 "DataBaseContentProvider getType"); 110 } 111 } 112 113 @Override 114 public Uri insert(Uri uri, ContentValues values) { 115 // TODO Auto-generated method stub 116 117 int match = URIMATCHER.match(uri); 118 Uri rtUri = null; 119 long rowId = db.replace(getTableNameByUri(uri), null, values); 120 if (rowId > 0) { 121 rtUri = ContentUris.withAppendedId(uri, rowId); 122 } 123 ContentResolver cr = getContext().getContentResolver(); 124 cr.notifyChange(uri, null); 125 return rtUri; 126 } 127 128 @Override 129 public Cursor query(Uri uri, String[] projection, String selection, 130 String[] selectionArgs, String sortOrder) { 131 // TODO Auto-generated method stub 132 String tableName = this.getTableNameByUri(uri); 133 Cursor c = db.query(tableName, projection, selection, selectionArgs, 134 null, null, sortOrder, null); 135 c.setNotificationUri(getContext().getContentResolver(), uri); 136 return c; 137 } 138 139 @Override 140 public int update(Uri uri, ContentValues values, String selection, 141 String[] selectionArgs) { 142 // TODO Auto-generated method stub 143 String tableName = this.getTableNameByUri(uri); 144 int rt = db.update(tableName, values, selection, selectionArgs); 145 ContentResolver cr = getContext().getContentResolver(); 146 cr.notifyChange(uri, null); 147 return rt; 148 } 149 150 }
View Code
![](/assets/blank.gif)
![](/assets/blank.gif)
<provider android:name="com.winning.cqs.pregnantbabycare_cqs_v1.db.DataBaseContentProvider"android:authorities="com.winning.cqs.pregnantbabycare_cqs_v1"android:multiprocess="true" > </provider>
View Code
![](/assets/blank.gif)
![](/assets/blank.gif)
public class User implements Serializable {private static final long serialVersionUID = 1L;public int _id;public String hospitalHost;public String hospitalName;public String lastModify;public String idNo;public String mobile;public String name;public String hospitalCode;public String dueDate;public Integer activity;public Integer yxtUserID;public String nick;public String cardTypeDis;public Integer hospitalID;public int id;public Integer yxtMemberID;public Integer defaultPatientID;public String address;public Integer lastPregnancyID;public String createDate;public String cardNo;public String medicalNo;public Integer patientID;public static String saveUserToDB(ContentResolver cr, User user) {if (null == cr || null == user) {return null;}String result = null;//获取到还没有被修改过的用户信息User user2 = getUsers(cr, String.valueOf(user.id));ContentValues values = new ContentValues();values.put(UserTable.Activity, user.activity);values.put(UserTable.Address, user.address);values.put(UserTable.CardNo, user.cardNo);values.put(UserTable.CardTypeDis, user.cardTypeDis);values.put(UserTable.CreateDate, user.createDate);values.put(UserTable.DefaultPatientID, user.defaultPatientID);values.put(UserTable.DueDate, user.dueDate);values.put(UserTable.HospitalCode, user.hospitalCode);values.put(UserTable.HospitalHost, user.hospitalHost);values.put(UserTable.HospitalID, user.hospitalID);values.put(UserTable.HospitalName, user.hospitalName);values.put(UserTable.Id, user.id);values.put(UserTable.IdNo, user.idNo);values.put(UserTable.LastModify, user.lastModify);values.put(UserTable.LastPregnancyID, user.lastPregnancyID);values.put(UserTable.MedicalNo, user.medicalNo);values.put(UserTable.Mobile, user.mobile);values.put(UserTable.Name, user.name);values.put(UserTable.Nick, user.nick);values.put(UserTable.PatientID, user.patientID);values.put(UserTable.YxtMemberID, user.yxtMemberID);values.put(UserTable.YxtUserID, user.yxtUserID);if (values.size() > 0) {String whereStr = UserTable.Id + " = " + user.id;// 查询是否有相同数据Cursor cursor = cr.query(UserTable.CONTENT_URI, null, whereStr,null, null);if ((null != cursor) && (0 < cursor.getCount())) {cr.update(UserTable.CONTENT_URI, values, whereStr, null);} else {cr.insert(UserTable.CONTENT_URI, values);}if (cursor != null) {cursor.close();}}if (isUpdate(user, user2))result = "信息保存成功!";return result;}/*** 判断用户信息是否被修改* @param user1* @param user2* @return*/public static boolean isUpdate(User user1, User user2) {boolean b = true;if (user1 == null || user2 == null) {return b;}if (user1.id == user2.id && user1.nick.equals(user2.nick)&& user1.dueDate.equals(user2.dueDate)) {b = false;}return b;}public static User getUsers(ContentResolver cr, String id) {User friend = null;if (null != cr) {Cursor cursor = cr.query(UserTable.CONTENT_URI, null, UserTable.Id+ "=?", new String[] { id }, null);if (cursor.moveToFirst()) {friend = new User();friend._id = cursor.getInt(cursor.getColumnIndex(UserTable._ID));friend.activity = cursor.getInt(cursor.getColumnIndex(UserTable.Activity));friend.address = cursor.getString(cursor.getColumnIndex(UserTable.Address));friend.cardNo = cursor.getString(cursor.getColumnIndex(UserTable.CardNo));friend.cardTypeDis = cursor.getString(cursor.getColumnIndex(UserTable.CardTypeDis));friend.createDate = cursor.getString(cursor.getColumnIndex(UserTable.CreateDate));friend.defaultPatientID = cursor.getInt(cursor.getColumnIndex(UserTable.DefaultPatientID));friend.dueDate = cursor.getString(cursor.getColumnIndex(UserTable.DueDate));friend.hospitalCode = cursor.getString(cursor.getColumnIndex(UserTable.HospitalCode));friend.hospitalHost = cursor.getString(cursor.getColumnIndex(UserTable.HospitalHost));friend.hospitalID = cursor.getInt(cursor.getColumnIndex(UserTable.HospitalID));friend.hospitalName = cursor.getString(cursor.getColumnIndex(UserTable.HospitalName));friend.id = cursor.getInt(cursor.getColumnIndex(UserTable.Id));friend.idNo = cursor.getString(cursor.getColumnIndex(UserTable.IdNo));friend.lastModify = cursor.getString(cursor.getColumnIndex(UserTable.LastModify));friend.lastPregnancyID = cursor.getInt(cursor.getColumnIndex(UserTable.LastPregnancyID));friend.medicalNo = cursor.getString(cursor.getColumnIndex(UserTable.MedicalNo));friend.mobile = cursor.getString(cursor.getColumnIndex(UserTable.Mobile));friend.name = cursor.getString(cursor.getColumnIndex(UserTable.Name));friend.nick = cursor.getString(cursor.getColumnIndex(UserTable.Nick));friend.patientID = cursor.getInt(cursor.getColumnIndex(UserTable.PatientID));friend.yxtMemberID = cursor.getInt(cursor.getColumnIndex(UserTable.YxtMemberID));friend.yxtUserID = cursor.getInt(cursor.getColumnIndex(UserTable.YxtUserID));cursor.moveToNext();cursor.close();}}return friend;}public static ArrayList<User> getAllUsers(ContentResolver cr) {ArrayList<User> users = new ArrayList<User>();if (null != cr) {Cursor cursor = cr.query(UserTable.CONTENT_URI, null, null, null,null);if (null != cursor) {int friendsCount = cursor.getCount();cursor.moveToFirst();for (int k = 0; k < friendsCount; k++) {User friend = new User();friend._id = cursor.getInt(cursor.getColumnIndex(UserTable._ID));friend.activity = cursor.getInt(cursor.getColumnIndex(UserTable.Activity));friend.address = cursor.getString(cursor.getColumnIndex(UserTable.Address));friend.cardNo = cursor.getString(cursor.getColumnIndex(UserTable.CardNo));friend.cardTypeDis = cursor.getString(cursor.getColumnIndex(UserTable.CardTypeDis));friend.createDate = cursor.getString(cursor.getColumnIndex(UserTable.CreateDate));friend.defaultPatientID = cursor.getInt(cursor.getColumnIndex(UserTable.DefaultPatientID));friend.dueDate = cursor.getString(cursor.getColumnIndex(UserTable.DueDate));friend.hospitalCode = cursor.getString(cursor.getColumnIndex(UserTable.HospitalCode));friend.hospitalHost = cursor.getString(cursor.getColumnIndex(UserTable.HospitalHost));friend.hospitalID = cursor.getInt(cursor.getColumnIndex(UserTable.HospitalID));friend.hospitalName = cursor.getString(cursor.getColumnIndex(UserTable.HospitalName));friend.id = cursor.getInt(cursor.getColumnIndex(UserTable.Id));friend.idNo = cursor.getString(cursor.getColumnIndex(UserTable.IdNo));friend.lastModify = cursor.getString(cursor.getColumnIndex(UserTable.LastModify));friend.lastPregnancyID = cursor.getInt(cursor.getColumnIndex(UserTable.LastPregnancyID));friend.medicalNo = cursor.getString(cursor.getColumnIndex(UserTable.MedicalNo));friend.mobile = cursor.getString(cursor.getColumnIndex(UserTable.Mobile));friend.name = cursor.getString(cursor.getColumnIndex(UserTable.Name));friend.nick = cursor.getString(cursor.getColumnIndex(UserTable.Nick));friend.patientID = cursor.getInt(cursor.getColumnIndex(UserTable.PatientID));friend.yxtMemberID = cursor.getInt(cursor.getColumnIndex(UserTable.YxtMemberID));friend.yxtUserID = cursor.getInt(cursor.getColumnIndex(UserTable.YxtUserID));users.add(friend);cursor.moveToNext();}cursor.close();}}return users;}public static class UserTable implements BaseColumns {public static final String TABLE_NAME = "user";public static final Uri CONTENT_URI = Uri.parse("content://"+ Constants.AUTHORITY + "/" + TABLE_NAME);public static final String CONTENT_TYPE = "vnd.android.cursor.dir/"+ Constants.AUTHORITY + "/" + TABLE_NAME;public static final String _ID = "_id";public static final String HospitalHost = "hospitalHost";public static final String HospitalName = "hospitalName";public static final String LastModify = "lastModify";public static final String IdNo = "idNo";public static final String Mobile = "mobile";public static final String Name = "name";public static final String HospitalCode = "hospitalCode";public static final String DueDate = "dueDate";public static final String Activity = "activity";public static final String YxtUserID = "yxtUserID";public static final String Nick = "nick";public static final String CardTypeDis = "cardTypeDis";public static final String HospitalID = "hospitalID";public static final String Id = "id";public static final String YxtMemberID = "yxtMemberID";public static final String DefaultPatientID = "defaultPatientID";public static final String Address = "address";public static final String LastPregnancyID = "lastPregnancyID";public static final String CreateDate = "createDate";public static final String CardNo = "cardNo";public static final String MedicalNo = "medicalNo";public static final String PatientID = "patientID";public static final String TABLE_CREATESQL = "CREATE TABLE "+ TABLE_NAME + " (" + "_id"+ " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," + HospitalHost+ " TEXT," + HospitalName + " TEXT," + LastModify + " TEXT,"+ IdNo + " TEXT," + Mobile + " TEXT," + Name + " TEXT,"+ HospitalCode + " TEXT," + DueDate + " TEXT," + Activity+ " TEXT," + YxtUserID + " TEXT," + Nick + " TEXT,"+ CardTypeDis + " TEXT," + HospitalID + " TEXT," + Id+ " TEXT," + YxtMemberID + " TEXT," + DefaultPatientID+ " TEXT," + Address + " TEXT," + LastPregnancyID + " TEXT,"+ CreateDate + " TEXT," + CardNo + " TEXT," + MedicalNo+ " TEXT," + PatientID + " INTEGER" + ");";}}
View Code
转载于:https://www.cnblogs.com/LiuZhen/p/3581760.html
ContentProvider实现流程相关推荐
- ContentProvider详解
本文基于android 12.0 主要讲解的是A进程访问B进程的ContentProvider的流程, 主要涉及到的代码路径: frameworks/base/core/java/android/co ...
- Android ContentProvider初探
这几篇将围绕ContentProvider进行安全漏洞分析. 关于ContentProvider,网上有不少资料,但都零零碎碎,而且样例时间也较老,因此我整合了网上可靠资源,并结合自己实践给出一篇可靠 ...
- android使用ContentProvider初始化sdk,初始化时机
文章目录 系列目录 前言 什么是ContentProvider sdk初始化 常规初始化方案 使用ContentProvider初始化sdk 为什么ContentProvider可以作为sdk初始化 ...
- Android数据库与ContentProvider
数据库基本概念: 数据库是"按照数据结构来组织.存储和管理数据的仓库".是一个长期存储在计算机内的.有组织的.可共享的.统一管理的大量数据的集合. 数据库的种类 最常用的数据库模型 ...
- ContentProvider解析-获取ContentProvider接口
本篇基于Android Framework 8.0的源码 对ContentProvider的使用从根本上来说也是围绕着Binder IPC.跟使用其他系统服务类似,APP对ContentProvide ...
- Android动态部署六:如何从插件apk中启动BroadcastReceiver和ContentProvider
转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51083464 github地址:https://github.com/ximsfei/Dy ...
- ContentResolver.query流程分析
文章目录 1.Context.getContentResolver() 2.ContentResolver.query() 3.ContentProviderProxy.query() 4.Trans ...
- Android 源码分析 (十一) ContentProvider 启动
ContentProvider (内容提供者) 属于四大组件之一,可以说它是在四大组件中开发者使用率最少的一个,它的作用就是进程间进行数据交互,底层采用 Binder 机制进行进程间通信. 下面我们就 ...
- 精选16家 Android 大厂面经汇总~
作者:随心 今年行情极差,有相当多的朋友遇到了给了口头offer,但是最终offer没下来:甚至正式offer给了,但是最终流程也没走完. 面试题排名不分先后,大公司的在后面. 总体来说,面试一般都是 ...
最新文章
- 利用python进行统计分析学习笔记 第7章
- 并发基础篇(一): Java 并发性和多线程
- Java字节码方法表与属性表深度剖析
- 如何科学高效的学习Web前端开发?
- 背不下《道德经》,至少背下这10句精华!
- java 怎么启动线程_线程如何正确的启动
- java 链表算法_数据结构算法Java版(一) 链表
- Java中J.U.C扩展组件之Fork,join
- PHP openssl加密扩展使用总结
- Spotfire 对 列 数据进行自定义排序
- 数据结构:选择类型排序的总结(考研)
- 图解电影的网站有那些?
- 对称、群论与魔术(三)——常见的几何对称性简介
- 成功解决:RuntimeError: implement_array_function method already has a docstring
- http和web服务器
- [原创]一种复制多轨加密VCD光盘(无文件怪碟)的心得
- 无需任何软件即可永久激活Window
- 软件系统设计步骤与原理
- 二十种题型带你复习《概率论与数理统计》得高分(高数叔)
- Java项目-王者荣耀源码分享~Java项目开发