Android四大組件之ContentProvider

來源:互聯網
上載者:User

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.personprovider”,
“person”, 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.provider.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
public class MyDBHelper extends SQLiteOpenHelper{public static final int VERSION=1;public static final String DB_NAME="gjun";public MyDBHelper(Context context){super(context, DB_NAME, null, VERSION);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db){// TODO Auto-generated method stub//通常在此建立資料庫中的表db.execSQL("create table student(id integer primary key autoincrement,name varchar(20))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){// TODO Auto-generated method stub}}

2、定義一個類,繼承了ContentProvider

public class MyProvider extends ContentProvider{private MyDBHelper helper;private SQLiteDatabase db;private static final String AUTHORI="com.provider.db.myprovider";private static final int ITEM=1;private static final int ITEMS=2;private static final String CONTENT_URI="content://com.provider.db.myprovider";private static final UriMatcher matcher;static{matcher=new UriMatcher(UriMatcher.NO_MATCH);matcher.addURI(AUTHORI,"student",ITEMS);matcher.addURI(AUTHORI,"student/#",ITEM);}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs){// TODO Auto-generated method stubswitch(matcher.match(uri)){case ITEM:int num=0;StringBuilder sb=new StringBuilder();long id=ContentUris.parseId(uri);sb.append("id="+id);db=helper.getWritableDatabase();if(selection!=null && !selection.equals("")){sb.append(" and selection");}num=db.delete("student",sb.toString(),selectionArgs);return num;case ITEMS:db=helper.getWritableDatabase();num=db.delete("student", selection,selectionArgs);return num;default:throw new IllegalArgumentException("UnKnow Uri:"+uri.toString());}}@Overridepublic String getType(Uri uri){// TODO Auto-generated method stubswitch(matcher.match(uri)){case ITEM:return "vnd.android.cursor.item/student";case ITEMS:return "vnd.android.cursor.dir/student";default:throw new IllegalArgumentException("UnKnow URI:"+uri.toString());}}@Overridepublic Uri insert(Uri uri, ContentValues values){// TODO Auto-generated method stublong id=0;Uri result=null;switch(matcher.match(uri)){case ITEM:db=helper.getWritableDatabase();id=db.insert("student", null, values);result=Uri.parse(uri.toString().substring(0, uri.toString().lastIndexOf("/")+1));ContentUris.withAppendedId(result, id);return result;case ITEMS:db=helper.getWritableDatabase();id=db.insert("student", null, values);result=ContentUris.withAppendedId(uri, id);return result;default:throw new IllegalArgumentException("UnKnow URI:"+uri.toString());}}@Overridepublic boolean onCreate(){// TODO Auto-generated method stubhelper=new MyDBHelper(this.getContext());return true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder){// TODO Auto-generated method stubdb=helper.getReadableDatabase();Cursor cursor=null;switch(matcher.match(uri)){case ITEM:StringBuilder sb=new StringBuilder();long id=ContentUris.parseId(uri);sb.append("id="+id);if(selection!=null && selection.equals("")){sb.append("and selection");}cursor=db.query("student", projection, sb.toString(), selectionArgs,null, null,sortOrder);return cursor;case ITEMS:return db.query("student", projection, selection, selectionArgs, null, null, sortOrder);default:throw new IllegalArgumentException("UnKnow URI:"+uri.toString());}}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs){// TODO Auto-generated method stubdb=helper.getWritableDatabase();int num=0;switch(matcher.match(uri)){case ITEM:StringBuilder sb=new StringBuilder();long id=ContentUris.parseId(uri);sb.append("id="+id);if(selection!=null && selection.equals("")){sb.append("and selection");}num=db.update("student", values, sb.toString(), selectionArgs);return num;case ITEMS:num=db.update("student", values, selection, selectionArgs);return num;default:throw new IllegalArgumentException("UnKnow URI:"+uri.toString());}}}

3、編寫一個測試類別

public class MainActivity extends Activity implements OnClickListener{    /** Called when the activity is first created. */private Button btnadd=null;private Button btnadds=null;private Button btndel=null;private Button btndels=null;private Button btnupdate=null;private Button btnupdates=null;private Button btnfind=null;private Button btnfinds=null;private ContentResolver resolver=null;private Uri uri=Uri.parse("content://com.provider.db.myprovider/student");    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();        initListener();        resolver=this.getContentResolver();    }        public void init()    {    btnadd=(Button)this.findViewById(R.id.btnadd);    btnadds=(Button)this.findViewById(R.id.btnadds);    btndel=(Button)this.findViewById(R.id.btndel);    btndels=(Button)this.findViewById(R.id.btndels);    btnupdate=(Button)this.findViewById(R.id.btnupdate);    btnupdates=(Button)this.findViewById(R.id.btnupdates);    btnfind=(Button)this.findViewById(R.id.btnfind);    btnfinds=(Button)this.findViewById(R.id.btnfinds);        }        public void initListener()    {    btnadd.setOnClickListener(this);    btnadds.setOnClickListener(this);    btndel.setOnClickListener(this);    btndels.setOnClickListener(this);    btnupdate.setOnClickListener(this);    btnupdates.setOnClickListener(this);    btnfind.setOnClickListener(this);    btnfinds.setOnClickListener(this);    }@Overridepublic void onClick(View v){// TODO Auto-generated method stubUri nowuri=null;if(v.getId()==R.id.btnadd){nowuri=ContentUris.withAppendedId(uri, 1);ContentValues cv=new ContentValues();cv.put("name", "gavin");resolver.insert(nowuri,cv);Toast.makeText(this, "添加用戶成功!",Toast.LENGTH_SHORT).show();}else if(v.getId()==R.id.btnadds){ContentValues cv=new ContentValues();cv.put("name", "tom");resolver.insert(uri,cv);Toast.makeText(this, "添加用戶成功!",Toast.LENGTH_SHORT).show();}else if(v.getId()==R.id.btndel){nowuri=ContentUris.withAppendedId(uri, 1);resolver.delete(nowuri, null, null);Toast.makeText(this, "刪除單個用戶成功!!",Toast.LENGTH_SHORT).show();}else if(v.getId()==R.id.btndels){resolver.delete(uri, null, null);Toast.makeText(this, "刪除所有用戶成功!!",Toast.LENGTH_SHORT).show();}else if(v.getId()==R.id.btnfind){nowuri=ContentUris.withAppendedId(uri, 6);Cursor cursor=resolver.query(nowuri, null, null, null, null);cursor.moveToFirst();int id=cursor.getInt(cursor.getColumnIndex("id"));String name=cursor.getString(cursor.getColumnIndex("name"));Toast.makeText(this, "id"+id+" name"+name,Toast.LENGTH_SHORT).show();}else if(v.getId()==R.id.btnfinds){Cursor cursor=resolver.query(uri, null, null, null, null);cursor.move(2);int id=cursor.getInt(cursor.getColumnIndex("id"));String name=cursor.getString(cursor.getColumnIndex("name"));Toast.makeText(this, "id"+id+" name"+name,Toast.LENGTH_SHORT).show();}else if(v.getId()==R.id.btnupdate){nowuri=ContentUris.withAppendedId(uri, 6);ContentValues cv=new ContentValues();cv.put("name", "jack");resolver.update(nowuri,cv,null,null);}else if(v.getId()==R.id.btnupdates){ContentValues cv=new ContentValues();cv.put("name", "jack");resolver.update(uri,cv,null,null);}}}

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.