ContentProvider实现流程
- public class DataBaseContentProvider extends ContentProvider {
- private SQLiteOpenHelper mSQLiteOpenHelper;
- private SQLiteDatabase db;
- /**
- * URI
- */
- private static final UriMatcher URIMATCHER = new UriMatcher(
- UriMatcher.NO_MATCH);
- private static final int URI_MATCH_USER = 0;
- private static final int URI_MATCH_FRIEND = 1;
- private static final int URI_MATCH_TALK = 2;
- private static final int URI_MATCH_COMMENT = 3;
- private static final int URI_MATCH_ALARM = 4;
- static {
- URIMATCHER.addURI(Constants.AUTHORITY, FriendTable.TABLE_NAME,
- URI_MATCH_FRIEND);
- URIMATCHER.addURI(Constants.AUTHORITY, UserTable.TABLE_NAME,
- URI_MATCH_USER);
- URIMATCHER.addURI(Constants.AUTHORITY, TalkTable.TABLE_NAME,
- URI_MATCH_TALK);
- URIMATCHER.addURI(Constants.AUTHORITY, CommentTable.TABLE_NAME,
- URI_MATCH_COMMENT);
- URIMATCHER.addURI(Constants.AUTHORITY,AlarmTable.TABLE_NAME,
- URI_MATCH_ALARM);
- }
- @Override
- public boolean onCreate() {
- // TODO Auto-generated method stub
- mSQLiteOpenHelper = DataBaseHelper.getInstance(getContext());
- db = mSQLiteOpenHelper.getWritableDatabase();
- return true;
- }
- /**
- * 返回要查询的表名
- */
- private String getTableNameByUri(Uri uri) {
- if (uri == null) {
- return null;
- }
- int match = URIMATCHER.match(uri);
- switch (match) {
- case URI_MATCH_USER:
- return UserTable.TABLE_NAME;
- case URI_MATCH_FRIEND:
- return FriendTable.TABLE_NAME;
- case URI_MATCH_TALK:
- return TalkTable.TABLE_NAME;
- case URI_MATCH_COMMENT:
- return CommentTable.TABLE_NAME;
- case URI_MATCH_ALARM:
- return AlarmTable.TABLE_NAME;
- default:
- throw new IllegalArgumentException(
- "DataBaseContentProvider getTableNameByUri");
- }
- }
- @Override
- public int delete(Uri url, String where, String[] whereArgs) {
- // TODO Auto-generated method stub
- int match = URIMATCHER.match(url);
- if (match == UriMatcher.NO_MATCH) {
- throw new IllegalArgumentException("Unknown URL");
- }
- int count = db.delete(getTableNameByUri(url), where, whereArgs);
- ContentResolver cr = getContext().getContentResolver();
- cr.notifyChange(url, null);
- return count;
- }
- @Override
- public String getType(Uri arg0) {
- // TODO Auto-generated method stub
- switch (URIMATCHER.match(arg0)) {
- case URI_MATCH_USER:
- return UserTable.CONTENT_TYPE;
- case URI_MATCH_FRIEND:
- return FriendTable.CONTENT_TYPE;
- case URI_MATCH_TALK:
- return TalkTable.CONTENT_TYPE;
- case URI_MATCH_COMMENT:
- return CommentTable.CONTENT_TYPE;
- case URI_MATCH_ALARM:
- return AlarmTable.CONTENT_TYPE;
- default:
- throw new IllegalArgumentException(
- "DataBaseContentProvider getType");
- }
- }
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- // TODO Auto-generated method stub
- int match = URIMATCHER.match(uri);
- Uri rtUri = null;
- long rowId = db.replace(getTableNameByUri(uri), null, values);
- if (rowId > 0) {
- rtUri = ContentUris.withAppendedId(uri, rowId);
- }
- ContentResolver cr = getContext().getContentResolver();
- cr.notifyChange(uri, null);
- return rtUri;
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- // TODO Auto-generated method stub
- String tableName = this.getTableNameByUri(uri);
- Cursor c = db.query(tableName, projection, selection, selectionArgs,
- null, null, sortOrder, null);
- c.setNotificationUri(getContext().getContentResolver(), uri);
- return c;
- }
- @Override
- public int update(Uri uri, ContentValues values, String selection,
- String[] selectionArgs) {
- // TODO Auto-generated method stub
- String tableName = this.getTableNameByUri(uri);
- int rt = db.update(tableName, values, selection, selectionArgs);
- ContentResolver cr = getContext().getContentResolver();
- cr.notifyChange(uri, null);
- return rt;
- }
- }
- <provider android:name="com.winning.cqs.pregnantbabycare_cqs_v1.db.DataBaseContentProvider"
- android:authorities="com.winning.cqs.pregnantbabycare_cqs_v1"
- android:multiprocess="true" >
- </provider>
- 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" + ");";
- }
- }
ContentProvider实现流程的更多相关文章
- Android ContentProvider 启动分析
对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分 ...
- Android艺术开发探索——第二章:IPC机制(下)
Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvi ...
- Android全面解析之Context机制
前言 很高兴遇见你~ 欢迎阅读我的文章. 在文章Android全面解析之由浅及深Handler消息机制中讨论到,Handler可以: 避免我们自己去手动写 死循环和输入阻塞 来不断获取用户的输入以及避 ...
- Contentprovider 注册 启动简单流程
安装app时packagemanager 读取manixfest获取provider信息 存在数据库里流程:1.加载ActivityThread main方法,创建消息队列.ActivityThrea ...
- Contentprovider的创建和使用流程概述
首先在provider类中继承并实现provider的几个必要方法 -- boolean onCreate(),用来执行一些初始化的工作. -- cursor query(Uri, String[], ...
- FrameWork启动流程
Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程.整体流程如下: Android是基于Linux内核的系统平台.启动时,首先通过bootloader(系统加载器),加载L ...
- android Camera 数据流程分析
这篇文章主要针对其数据流程进行分析.Camera一般用于图像浏览.拍照和视频录制.这里先对图像浏览和拍照的数据流进行分析,后面再对视频电话部分进行分析. 1.针对HAL层对摄像头数据处理补充一下 Li ...
- ContentProvider初阶Cookbook
在Android世界里,ContentProvider将数据存储抽象成了类似SQL的形式,通过insert, delete, update, query等接口实现对数据的增删改查.通过ContentP ...
- Android 7.0 中 ContentProvider 实现原理
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:汪毅雄 导语: 本文描述了ContentProvider发布者和调用者这两在Framework层是如何实现的. 作为Android的四大 ...
随机推荐
- LINQ to SQL语句(1)之Where
适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操作包括3种形式,分别为简单形式.关系条件形式. ...
- jQuery Pagination分页插件的使用
一.引用CSS和JS: <link href="/Content/Plugins/jQuery.Pagination_v2.2/pagination.css" rel=&qu ...
- Web API应用架构设计分析(1)
Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framewor ...
- [水煮 ReSharper] 高效开发—十个实用的快捷键
所有 ReSherper 的功能都可以使用快捷键.大部分功能都有默认快捷键,剩下的少数功能可以自定义快捷键. ReSharper 提供了两种快捷键的方式 Visual Studio:这种方式可以减少与 ...
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
示例准备 打开上一篇文章配置好的AD域控制器 开始菜单-->管理工具-->Active Directory 用户和计算机 新建组织单位和用户 新建层次关系如下: 知识了解 我们要用C# ...
- What Can Java Technology Do?
What Can Java Technology Do? The general-purpose(多用途的), high-level Java programming language is a po ...
- 使用Aspose插件对Excel操作
使用使用Aspose插件对Excel文档进行导入导出操作 使用前请先下载Aspose插件引用 Excel导入: 前台使用file标签获取,submit方式提交. <form id="f ...
- 设置MySQL服务自动运行
一般情况下,MySQL安装以后是自动运行的,不知道我这台机器是什么原因,MySQL不能自动运行,每次开机后都要手动运行mysqld.exe,比较麻烦,于是用以下方法将MySQL自动启动: 1. 运行c ...
- XE8 FMX SpeedButton 大图标(改 Style)
自从 XE8 提供 ImageList 带来了很多便利,但 SpeedButton 的图标太小(不够大气),还好 FMX 提供了 Style 可供使用者自订图标大小及显示位置,请自行按图索骥,做一遍: ...
- Scalaz(19)- Monad: \/ - Monad 版本的 Either
scala标准库提供了一个Either类型,它可以说是Option的升级版.与Option相同,Either也有两种状态:Left和Right,分别对应Option的None和Some,不同的是Lef ...