分享

Android内容提供者(Content provider)

 androidHung 2014-06-04
Java代码 复制代码 收藏代码
  1. package com.jbridge.db;  
  2.   
  3. import com.jbridge.service.DataBaseOpenHelper;  
  4.   
  5. import android.content.ContentProvider;  
  6. import android.content.ContentUris;  
  7. import android.content.ContentValues;  
  8. import android.content.UriMatcher;  
  9. import android.database.Cursor;  
  10. import android.database.sqlite.SQLiteDatabase;  
  11. import android.net.Uri;  
  12. import android.text.TextUtils;  
  13.   
  14. public class PersonContentProvider extends ContentProvider {  
  15.     private DataBaseOpenHelper dbOpenHelper;  
  16.     private static final int ALLPERSON = 1;  
  17.     private static final int PERSON = 2;  
  18.     private static final UriMatcher sMatcher = new UriMatcher(  
  19.             UriMatcher.NO_MATCH);  
  20.     static {  
  21.         sMatcher.addURI("com.jbridge.provider.personprovider""person",  
  22.                 ALLPERSON);  
  23.         sMatcher.addURI("com.jbridge.provider.personprovider""person/#",  
  24.                 PERSON);  
  25.     }  
  26.   
  27.     @Override  
  28.     public int delete(Uri uri, String selection, String[] selectionArgs) {  
  29.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  30.         int count = 0;  
  31.         switch (sMatcher.match(uri)) {  
  32.         case ALLPERSON:// com.jbridge.provider.personprovider/person  
  33.             count=db.delete("person", selection,selectionArgs);  
  34.             break;  
  35.         case PERSON:// com.jbridge.provider.personprovider/person/10  
  36.             long personid=ContentUris.parseId(uri);  
  37.             //防止他输入时String selection, String[] selectionArgs参数为空,这样就会修改表的所有数据了  
  38.             String where=TextUtils.isEmpty(selection)?"personid=?":selection+" and personid=?";  
  39.             String[] params=new String[]{String.valueOf(personid)};   
  40.             if (!TextUtils.isEmpty(selection)&&selectionArgs!=null) {  
  41.                 params=new String[selectionArgs.length+1];  
  42.                 for (int i=0;i<selectionArgs.length;i++) {  
  43.                     params[i]=selectionArgs[i];  
  44.                 }  
  45.                 params[selectionArgs.length]=String.valueOf(personid);  
  46.             }  
  47.             count = db.delete("person", where,params);  
  48.             break;  
  49.         default:  
  50.             throw new IllegalArgumentException("Unknow Uri:" + uri);  
  51.   
  52.         }  
  53.           
  54.         return count;  
  55.     }  
  56.   
  57.     @Override  
  58.     public String getType(Uri uri) {  
  59.         switch (sMatcher.match(uri)) {  
  60.         case ALLPERSON:// //数据集的MIME类型字符串则应该以vnd.android.cursor.dir/开头  
  61.             return "vnd.android.cursor.dir/personprovider.person";  
  62.         case PERSON://单一数据的MIME类型字符串应该以vnd.android.cursor.item/开头  
  63.             return "vnd.android.cursor.item/personprovider.person";  
  64.         default:  
  65.             throw new IllegalArgumentException("Unknow Uri:" + uri);  
  66.         }  
  67.     }  
  68.   
  69.     @Override  
  70.     public Uri insert(Uri uri, ContentValues values) {  
  71.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  72.         long id = 0;  
  73.         switch (sMatcher.match(uri)) {  
  74.         case ALLPERSON:// com.jbridge.provider.personprovider/person  
  75.             id = db.insert("person""name", values);// 返回值是记录的行号,主键为int实际上就是主键值,主键为text则为行号  
  76.             return ContentUris.withAppendedId(uri, id);  
  77.         case PERSON:// com.jbridge.provider.personprovider/person/10  
  78.             id = db.insert("person""name", values);// 返回值是记录的行号,主键为int实际上就是主键值,主键为text则为行号  
  79.             String path = uri.toString();  
  80.             return Uri.parse(path.substring(0, path.lastIndexOf("/")) + id);  
  81.         default:  
  82.             throw new IllegalArgumentException("Unknow Uri:" + uri);  
  83.         }  
  84.     }  
  85.   
  86.     @Override  
  87.     public boolean onCreate() {  
  88.         dbOpenHelper=new DataBaseOpenHelper(this.getContext());  
  89.         return false;  
  90.     }  
  91.   
  92.     @Override  
  93.     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,  
  94.             String sortOrder) {  
  95.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  96.         switch (sMatcher.match(uri)) {  
  97.         case ALLPERSON:// com.jbridge.provider.personprovider/person  
  98.             return db.query("person",projection, selection, selectionArgs,nullnull, sortOrder);  
  99.         case PERSON:// com.jbridge.provider.personprovider/person/10  
  100.             long personid=ContentUris.parseId(uri);  
  101.             //防止他输入时String selection, String[] selectionArgs参数为空,这样就会修改表的所有数据了  
  102.             String where=TextUtils.isEmpty(selection)?"personid=?":selection+" and personid=?";  
  103.             String[] params=new String[]{String.valueOf(personid)};   
  104.             if (!TextUtils.isEmpty(selection)&&selectionArgs!=null) {  
  105.                 params=new String[selectionArgs.length+1];  
  106.                 for (int i=0;i<selectionArgs.length;i++) {  
  107.                     params[i]=selectionArgs[i];  
  108.                 }  
  109.                 params[selectionArgs.length]=String.valueOf(personid);  
  110.             }  
  111.             return db.query("person",projection, where, params,nullnull, sortOrder);  
  112.   
  113.         default:  
  114.             throw new IllegalArgumentException("Unknow Uri:" + uri);  
  115.   
  116.         }  
  117.           
  118.           
  119.     }  
  120.   
  121.     @Override  
  122.     //返回值为影响的记录数  
  123.     public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {  
  124.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  125.         int count = 0;  
  126.         switch (sMatcher.match(uri)) {  
  127.         case ALLPERSON:// com.jbridge.provider.personprovider/person  
  128.             count = db.update("person", values, selection,selectionArgs);  
  129.             break;  
  130.         case PERSON:// com.jbridge.provider.personprovider/person/10  
  131.             long personid=ContentUris.parseId(uri);  
  132.             //防止他输入时String selection, String[] selectionArgs参数为空,这样就会修改表的所有数据了  
  133.             String where=TextUtils.isEmpty(selection)?"personid=?":selection+" and personid=?";  
  134.             String[] params=new String[]{String.valueOf(personid)};   
  135.             if (!TextUtils.isEmpty(selection)&&selectionArgs!=null) {  
  136.                 params=new String[selectionArgs.length+1];  
  137.                 for (int i=0;i<selectionArgs.length;i++) {  
  138.                     params[i]=selectionArgs[i];  
  139.                 }  
  140.                 params[selectionArgs.length]=String.valueOf(personid);  
  141.             }  
  142.             count = db.update("person", values, where,params);  
  143.             break;  
  144.         default:  
  145.             throw new IllegalArgumentException("Unknow Uri:" + uri);  
  146.   
  147.         }  
  148.           
  149.         return count;  
  150.     }  
  151.   
  152. }  
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多