Android四大组件之ContentProvider

来源:互联网 发布:楼主是玉帝打一网络语 编辑:程序博客网 时间:2024/06/07 23:38

ContentProvider主要是提供了我们访问数据的统一接口,一旦一个类继承了ContengProvider,我们就会称这个应用程序为ContengProvider(内容提供者)

使用ContentProvider的步骤:

1、写一个类继承ContentProvider,并改写其中的一些方法。

2、在AndroidManifest.xml文件中声明你所定义的provider

 

在使用ContentProvider之前先要了解两个类的使用:

UriMatcher:

UriMatcher类用于匹配Uri,它的用法如下:
首先第一步把你需要匹配Uri路径全部给注册上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher  sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://cn.itcast.provider.personprovider/person路径,返回匹配码为1
sMatcher.addURI(cn.itcast.provider.personproviderperson, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配content://cn.itcast.provider.personprovider/person/230路径,返回匹配码为2
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);//#号为通配符
 
ContentUris:
ContentUris类用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
withAppendedId(uri, id)用于为路径加上ID部分:
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
//生成后的Uri为:content://cn.itcast.provid
er.personprovider/person/10
parseId(uri)方法用于从路径中获取ID部分:
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);//获取的结果为:10
 
下面开始使用ContentProvider:
1、定义一个类,继承SQLiteOpenHelper
[java] view plaincopyprint?
  1. public class MyDBHelper extends SQLiteOpenHelper  
  2. {  
  3.     public static final int VERSION=1;  
  4.     public static final String DB_NAME="gjun";  
  5.   
  6.     public MyDBHelper(Context context)  
  7.     {  
  8.         super(context, DB_NAME, null, VERSION);  
  9.         // TODO Auto-generated constructor stub  
  10.     }  
  11.   
  12.     @Override  
  13.     public void onCreate(SQLiteDatabase db)  
  14.     {  
  15.         // TODO Auto-generated method stub  
  16.           
  17.         //通常在此创建数据库中的表  
  18.         db.execSQL("create table student(id integer primary key autoincrement,name varchar(20))");  
  19.     }  
  20.   
  21.     @Override  
  22.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)  
  23.     {  
  24.         // TODO Auto-generated method stub  
  25.   
  26.     }  
  27.   
  28. }  


2、定义一个类,继承了ContentProvider

[java] view plaincopyprint?
  1. public class MyProvider extends ContentProvider  
  2. {  
  3.     private MyDBHelper helper;  
  4.     private SQLiteDatabase db;  
  5.     private static final String AUTHORI="com.provider.db.myprovider";  
  6.     private static final int ITEM=1;  
  7.     private static final int ITEMS=2;  
  8.     private static   final String CONTENT_URI="content://com.provider.db.myprovider";  
  9.       
  10.     private static final UriMatcher matcher;  
  11.     static  
  12.     {  
  13.         matcher=new UriMatcher(UriMatcher.NO_MATCH);  
  14.         matcher.addURI(AUTHORI,"student",ITEMS);  
  15.         matcher.addURI(AUTHORI,"student/#",ITEM);  
  16.     }  
  17.       
  18.     @Override  
  19.     public int delete(Uri uri, String selection, String[] selectionArgs)  
  20.     {  
  21.         // TODO Auto-generated method stub  
  22.         switch(matcher.match(uri))  
  23.         {  
  24.         case ITEM:  
  25.             int num=0;  
  26.             StringBuilder sb=new StringBuilder();  
  27.             long id=ContentUris.parseId(uri);  
  28.             sb.append("id="+id);  
  29.             db=helper.getWritableDatabase();  
  30.               
  31.             if(selection!=null && !selection.equals(""))  
  32.             {  
  33.                 sb.append(" and selection");  
  34.             }  
  35.             num=db.delete("student",sb.toString(),selectionArgs);  
  36.             return num;  
  37.         case ITEMS:  
  38.             db=helper.getWritableDatabase();  
  39.             num=db.delete("student", selection,selectionArgs);  
  40.             return num;  
  41.             default:  
  42.             throw new IllegalArgumentException("UnKnow Uri:"+uri.toString());     
  43.         }  
  44.           
  45.     }  
  46.   
  47.     @Override  
  48.     public String getType(Uri uri)  
  49.     {  
  50.         // TODO Auto-generated method stub  
  51.         switch(matcher.match(uri))  
  52.         {  
  53.         case ITEM:  
  54.             return "vnd.android.cursor.item/student";  
  55.               
  56.         case ITEMS:  
  57.             return "vnd.android.cursor.dir/student";  
  58.               
  59.         default:  
  60.         throw new IllegalArgumentException("UnKnow URI:"+uri.toString());     
  61.         }  
  62.           
  63.     }  
  64.   
  65.     @Override  
  66.     public Uri insert(Uri uri, ContentValues values)  
  67.     {  
  68.         // TODO Auto-generated method stub  
  69.         long id=0;  
  70.         Uri result=null;  
  71.         switch(matcher.match(uri))  
  72.         {  
  73.           
  74.           
  75.         case ITEM:  
  76.             db=helper.getWritableDatabase();  
  77.             id=db.insert("student"null, values);  
  78.             result=Uri.parse(uri.toString().substring(0, uri.toString().lastIndexOf("/")+1));  
  79.             ContentUris.withAppendedId(result, id);  
  80.             return result;  
  81.           
  82.         case ITEMS:   
  83.             db=helper.getWritableDatabase();  
  84.             id=db.insert("student"null, values);  
  85.             result=ContentUris.withAppendedId(uri, id);  
  86.               
  87.             return result;  
  88.         default:  
  89.             throw new IllegalArgumentException("UnKnow URI:"+uri.toString());  
  90.         }  
  91.           
  92.     }  
  93.   
  94.     @Override  
  95.     public boolean onCreate()  
  96.     {  
  97.         // TODO Auto-generated method stub  
  98.         helper=new MyDBHelper(this.getContext());  
  99.         return true;  
  100.     }  
  101.   
  102.     @Override  
  103.     public Cursor query(Uri uri, String[] projection, String selection,  
  104.             String[] selectionArgs, String sortOrder)  
  105.     {  
  106.         // TODO Auto-generated method stub  
  107.         db=helper.getReadableDatabase();  
  108.         Cursor cursor=null;  
  109.         switch(matcher.match(uri))  
  110.         {  
  111.         case ITEM:  
  112.             StringBuilder sb=new StringBuilder();  
  113.             long id=ContentUris.parseId(uri);  
  114.             sb.append("id="+id);  
  115.             if(selection!=null && selection.equals(""))  
  116.             {  
  117.                 sb.append("and selection");  
  118.             }  
  119.             cursor=db.query("student", projection, sb.toString(), selectionArgs,nullnull,sortOrder);  
  120.             return cursor;  
  121.               
  122.         case ITEMS:  
  123.             return db.query("student", projection, selection, selectionArgs, nullnull, sortOrder);  
  124.         default:  
  125.             throw new IllegalArgumentException("UnKnow URI:"+uri.toString());  
  126.         }  
  127.           
  128.     }  
  129.   
  130.     @Override  
  131.     public int update(Uri uri, ContentValues values, String selection,  
  132.             String[] selectionArgs)  
  133.     {  
  134.         // TODO Auto-generated method stub  
  135.         db=helper.getWritableDatabase();  
  136.         int num=0;  
  137.         switch(matcher.match(uri))  
  138.         {  
  139.         case ITEM:  
  140.             StringBuilder sb=new StringBuilder();  
  141.             long id=ContentUris.parseId(uri);  
  142.             sb.append("id="+id);  
  143.             if(selection!=null && selection.equals(""))  
  144.             {  
  145.                 sb.append("and selection");  
  146.             }  
  147.             num=db.update("student", values, sb.toString(), selectionArgs);  
  148.             return num;  
  149.         case ITEMS:  
  150.             num=db.update("student", values, selection, selectionArgs);  
  151.             return num;  
  152.         default:  
  153.             throw new IllegalArgumentException("UnKnow URI:"+uri.toString());  
  154.         }  
  155.           
  156.     }  
  157.   
  158. }  


3、编写一个测试类

[java] view plaincopyprint?
  1. public class MainActivity extends Activity implements OnClickListener  
  2. {  
  3.     /** Called when the activity is first created. */  
  4.       
  5.     private Button btnadd=null;  
  6.     private Button btnadds=null;  
  7.     private Button btndel=null;  
  8.     private Button btndels=null;  
  9.     private Button btnupdate=null;  
  10.     private Button btnupdates=null;  
  11.     private Button btnfind=null;  
  12.     private Button btnfinds=null;  
  13.       
  14.     private ContentResolver resolver=null;  
  15.     private Uri uri=Uri.parse("content://com.provider.db.myprovider/student");  
  16.       
  17.       
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         init();  
  23.         initListener();  
  24.         resolver=this.getContentResolver();  
  25.     }  
  26.       
  27.     public void init()  
  28.     {  
  29.         btnadd=(Button)this.findViewById(R.id.btnadd);  
  30.         btnadds=(Button)this.findViewById(R.id.btnadds);  
  31.         btndel=(Button)this.findViewById(R.id.btndel);  
  32.         btndels=(Button)this.findViewById(R.id.btndels);  
  33.         btnupdate=(Button)this.findViewById(R.id.btnupdate);  
  34.         btnupdates=(Button)this.findViewById(R.id.btnupdates);  
  35.         btnfind=(Button)this.findViewById(R.id.btnfind);  
  36.         btnfinds=(Button)this.findViewById(R.id.btnfinds);  
  37.           
  38.     }  
  39.       
  40.     public void initListener()  
  41.     {  
  42.         btnadd.setOnClickListener(this);  
  43.         btnadds.setOnClickListener(this);  
  44.         btndel.setOnClickListener(this);  
  45.         btndels.setOnClickListener(this);  
  46.         btnupdate.setOnClickListener(this);  
  47.         btnupdates.setOnClickListener(this);  
  48.         btnfind.setOnClickListener(this);  
  49.         btnfinds.setOnClickListener(this);  
  50.     }  
  51.   
  52.     @Override  
  53.     public void onClick(View v)  
  54.     {  
  55.         // TODO Auto-generated method stub  
  56.         Uri nowuri=null;  
  57.         if(v.getId()==R.id.btnadd)  
  58.         {  
  59.             nowuri=ContentUris.withAppendedId(uri, 1);  
  60.             ContentValues cv=new ContentValues();  
  61.             cv.put("name""gavin");  
  62.               
  63.             resolver.insert(nowuri,cv);  
  64.             Toast.makeText(this"添加用戶成功!",Toast.LENGTH_SHORT).show();  
  65.         }else if(v.getId()==R.id.btnadds)  
  66.         {  
  67.             ContentValues cv=new ContentValues();  
  68.             cv.put("name""tom");  
  69.               
  70.             resolver.insert(uri,cv);  
  71.             Toast.makeText(this"添加用戶成功!",Toast.LENGTH_SHORT).show();  
  72.         }else if(v.getId()==R.id.btndel)  
  73.         {  
  74.             nowuri=ContentUris.withAppendedId(uri, 1);  
  75.             resolver.delete(nowuri, nullnull);  
  76.             Toast.makeText(this"刪除單個用戶成功!!",Toast.LENGTH_SHORT).show();  
  77.         }else if(v.getId()==R.id.btndels)  
  78.         {  
  79.             resolver.delete(uri, nullnull);  
  80.             Toast.makeText(this"刪除所有用戶成功!!",Toast.LENGTH_SHORT).show();  
  81.         }else if(v.getId()==R.id.btnfind)  
  82.         {  
  83.             nowuri=ContentUris.withAppendedId(uri, 6);  
  84.             Cursor cursor=resolver.query(nowuri, nullnullnullnull);  
  85.             cursor.moveToFirst();  
  86.             int id=cursor.getInt(cursor.getColumnIndex("id"));  
  87.             String name=cursor.getString(cursor.getColumnIndex("name"));  
  88.             Toast.makeText(this"id"+id+" name"+name,Toast.LENGTH_SHORT).show();  
  89.         }else if(v.getId()==R.id.btnfinds)  
  90.         {  
  91.             Cursor cursor=resolver.query(uri, nullnullnullnull);  
  92.             cursor.move(2);  
  93.             int id=cursor.getInt(cursor.getColumnIndex("id"));  
  94.             String name=cursor.getString(cursor.getColumnIndex("name"));  
  95.             Toast.makeText(this"id"+id+" name"+name,Toast.LENGTH_SHORT).show();  
  96.         }else if(v.getId()==R.id.btnupdate)  
  97.         {  
  98.             nowuri=ContentUris.withAppendedId(uri, 6);  
  99.             ContentValues cv=new ContentValues();  
  100.             cv.put("name""jack");  
  101.             resolver.update(nowuri,cv,null,null);  
  102.         }else if(v.getId()==R.id.btnupdates)  
  103.         {  
  104.             ContentValues cv=new ContentValues();  
  105.             cv.put("name""jack");  
  106.             resolver.update(uri,cv,null,null);  
  107.         }  
  108.           
  109.     }  
  110. }  
0 0
原创粉丝点击