android ContentProvider結合SQLiteHelper實現資料的共用

來源:互聯網
上載者:User

網上關於利用ContentProvider實現資料、檔案等的共用,例子很多,我會一一羅列,別人寫過的我就不費話了:

重要的幾點:

1、ContentProvider基本不需要使用者與它的對象互動,系統會自動喚醒所有註冊了的provider

2、ContentProvider的OnCreate方法,並不是一直被系統調用的<網上好多人是誤導,本人親測,只有你第一次安裝該apk的時候才會被調用>

  <SqliteHelper Oncreate方法沒有被調用的原因!>

3、SqliteHelper的OnCreate方法也是,並不是第一次安裝應用時,沒有該資料庫才會調用,而需要手動通過new出來的一個SqliteHelper對象去調用它的

  getReadableDatabase來實現

4、本人觀點,如果大家發現有不妥的,歡迎指正,有空把流程圖補上,外帶一個源碼發過來!

http://blog.csdn.net/liuhe688/article/details/7050868<教程1>

http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.html<教程2>

當然,別人的東西是別人的,學習完之後自己也得總結總結:

------------------------------------------------------------------------------------------------------------------------------------

首先:ContentProvider是應用程式之間資料存放區跟檢索的一個橋樑,他的作用是使得多個應用程式之間可以實現資料共用

ContentProvider的使用:

1、必須在AndroidManifest.xml裡進行註冊

<provider    android:name=".provider.className"<!--需與包下的provider類相一致-->    android:authorities="LocalShelves"<!--需要共用,該授權必須唯一,要不多個應用就不知道該使用哪個Provider了-->   />

2、建立Provider類

在以上1、2教程裡應該寫的很清楚,不多說,大體思路就是

package org.curiouscreature.android.shelves.provider;public  class youProvider extends ContentProvider{    private final static String LOCAL_DB_NAME="yourDbName.db";    private final static int    DB_VERSION=1;
   //引入mOpenHelper實現第一次建立資料表 private SQLiteOpenHelper mOpenHelper;
//用來匹配以後的查詢項,根據匹配到的查詢項,做相應的查詢 private static final UriMatcher URI_MATCHER;
//授權“網域名稱”,必須唯一,且與AndroidManifest裡面註冊的須一致 private final static String AUTHORITY="LocalShelves";
   //以下是不同查詢項的狀態代碼 private static final int SEARCH = 1; private static final int NAMES = 2; private static final int NAMES_ID = 3; static { URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
     //先將各項註冊進去,才能在後面用到後進行匹配 URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH); URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH); URI_MATCHER.addURI(AUTHORITY, "name", NAMES); URI_MATCHER.addURI(AUTHORITY, "name/#", NAMES_ID); } @Override public boolean onCreate() { // TODO Auto-generated method stub Log.w("pdb","run here");
     //這塊搞了我大半天,所有東西都搞定了,就是表建不出來,原來SqliteHelper的OnCreate()方法不會被自動調用,只有使用getReadableDatabase()後才會建立     表 mOpenHelper=new DatabaseHelper(getContext()); mOpenHelper.getReadableDatabase(); mOpenHelper.getWritableDatabase(); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO Auto-generated method stub return null; } @Override
   //查詢類型定義 public String getType(Uri uri) { switch (URI_MATCHER.match(uri)) { case BOOKS: return "vnd.android.cursor.dir/vnd.org.curiouscreature.provider.yourprovider"; case BOOK_ID: return "vnd.android.cursor.item/vnd.org.curiouscreature.provider.yourprovider"; default: throw new IllegalArgumentException("Unknown URI " + uri); } }   @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } //內部類,java知識,需要的可以去本部落格查看 private static class DatabaseHelper extends SQLiteOpenHelper { /** * @funtion 建構函式 * @param context */ public DatabaseHelper(Context context) { super(context, LOCAL_DB_NAME, null, DB_VERSION); // TODO Auto-generated constructor stub }     //建立表的語句在這裡寫,onCreate()方法沒調用是因為它不是建構函式,不會被自動調用,需要手動通過上面提到的方法調用 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.w("table create tag","yessss"); db.execSQL("........此處省略若干字"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS XXXX"); onCreate(db); } }}

3、獲得provider並進行相關操作:

     在需要的地方加入以下代碼,然後進行相關操作

ContentResolver cr = this.getContentResolver();  

OK,基本步驟就是這樣,打完收工,回家吃飯,有空把流程圖補上!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.