• ContentProvider实现流程


    个人记录
      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
    <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
    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
  • 相关阅读:
    第九周作业
    2020软件工程作业02
    自我介绍
    Java学习开发第三阶段总结
    Java学习开发第一阶段总结
    2019春总结作业
    基础作业
    2019春第四次课程设计实验报告
    2019春第三次课程设计实验报告
    2019春第二次课程设计实验报告
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/3581760.html
Copyright © 2020-2023  润新知