Android中資料存放區(四)——ContentProvider儲存資料

來源:互聯網
上載者:User

標籤:方式   sql   自己的   不同的   down   log   number   sort   sdc   

 

目錄(?)[+]

 

  當一個應用程式在Android中安裝後,我們在使用應用的過程中會產生很多的資料,應用都有自己的資料,那麼我們應該如何儲存資料呢?

資料存放區方式

Android 的資料存放區有5種方式:

1. SharedPreferences儲存資料 
   SharedPreferences資料存放區,也叫作xml儲存。這是將資料存放區“data/data/程式包名/share_prefs”路徑下的到xml檔案中。 
相關串連: 《Android中資料存放區——SharedPreferences儲存資料 》  
2. 檔案儲存體資料 
   分為內部儲存和外部儲存。內部儲存是應用程式使用Android為自己分配的記憶體空間,資料存放區到“/data/data/程式包名/files”路徑下的相應檔案中。外部儲存是使用手機sdcard的記憶體(這個sdcard並不是我們經常說的那個可以拆卸替換的SD卡,那個SD卡我們稱之為擴充卡),使用這部分記憶體要聲明相應的許可權。   
相關串連:《Android中資料存放區——檔案儲存體資料 》  
3. SQLite資料庫儲存資料 
  使用資料庫進行儲存,這個一般資料量比較大的時候。  
相關串連:《Android中資料存放區——SQLite資料庫儲存資料 》 
4. 使用ContentProvider儲存資料 
  這個比較眼熟,ContentProvider也是Android的四大組件之一。ContentProvider一般是第三方提供的資料存放區方式,向我們手機中的通訊錄連絡人,照片,音樂等…… 
相關串連:《Android中資料存放區——ContentProvider儲存資料》   
5. 網路儲存資料 
   這個是將資料上傳到網路上進行儲存。 
    
   下面進入我們今天的主要內容,使用ContentProvider儲存資料。

ContentProvider儲存資料

  ContentProvider內容提供器,主要用於在不同應用程式之間實現資料的共用功能。舉例來說,我們開發一個應用程式,我們不可能只使用自己的資料,也會用到其他應用的資料,像手機中的通訊錄連絡人,圖片,音樂等是使用到最多的。我們使用的SharedPreferences,檔案儲存體以及資料庫SQLite都是從儲存的應用內部的資料,實現不同應用間的資料共用就要使用到ContentProvider。 
  ContentProvider使用方法有兩種:一種是使用現有的內容提供器來讀取和操作相應程式中的資料;另一種是建立自己的內容提供器給我們的應用提供外部存取介面。 
   
  這裡我們只講解使用已有的內容提供器來讀取和操作相應程式的資料。

ContentResolver的使用

  想要訪問內容提供器中的內容我們需要藉助ContentResolver類。 
  ContentResolver為我們提供了”增“insert(Uri url, ContentValues values),“刪”delete(Uri url, String where, String[] selectionArgs),“改”update(Uri uri, ContentValues values, String where, String[] selectionArgs),“查”query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)方法對內容提供器中的內容進行操作,是不是很眼熟,對啊,和SQLiteDatabase中的增刪改查操作是一樣的,在此我們不再具體描述。

Uri的使用

  在SQLiteDatabase中,對資料庫的操作是通過接受資料庫的表名進行操作的,而在ContentResolver中是不接受表名的,而接受Uri對象。通過Uri指定操作的內容“位置”。 
  Uri由兩部分組成:許可權和路徑。許可權是對於不同的應用程式進行區分的,一般用應用程式的包名;路徑是對於同一應用程式的不同表進行區分的。例如,我們有一個應用程式的包名是“com.example.ontentproviderdemo”,應用程式中有一個表“table”,則Uri為:“content://com.example.ontentproviderdemo/table”。我們通過parse()方法將其解析為Uri便可以使用了。

  1 Uri uri = Uri.parse.("content://com.example.ontentproviderdemo/table"); 
查詢通訊錄

  我們以查詢通訊錄中的內容為例,看一下ContentProvider的使用。通過Android提供的ContentProvider內容提供器訪問通訊錄中的連絡人資料。 
1. 讀取連絡人是需要許可權的,首先在AndroidManifext中加入許可權:

 1 <!--允許讀取通訊錄 --> 2 <uses-permission android:name="android.permission.READ_CONTACTS"/> 

2. 建立ContentResolver對象對ContentProvider進行操作。 

3. 建立一個Uri對象,指定訪問通訊錄。這裡我們使用Android已經解析好的Uri即可:ContactsContract.CommonDataKinds.Phone.CONTENT_URI 
4. 尋找連絡人內容使用ContentResolver的query()方法,返回一個Cursor對象。

1     Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;2         Cursor cursor = contentResolver.query(uri, new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);3         cursor.moveToFirst();4         while (!cursor.isAfterLast()) {5             String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));6             String num = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));7             Log.d("data", "連絡人姓名:" + name + ", 電話:" + num);8             cursor.moveToNext();9         }

 

通訊錄內容:

讀取結果:

Android中資料存放區(四)——ContentProvider儲存資料

相關文章

聯繫我們

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