Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發——數據存儲之ContentProvider(1)

Android開發——數據存儲之ContentProvider(1)

編輯:Android開發實例

一、Android中四種數據存儲方式

1、SharePreferences: 一種輕量級的數據存儲方式,采用鍵值對的方式存儲。最終還是以文件的方式存儲。主要用了應用的配置,類型window中常見的*.ini文件。數據不共享,只能提供給一個應用使用。

2、SQLite:一個用於移動設備,小而強大的數據庫。數據可以共享。

3、文件存儲:就是文件操作咯。一般用了體積較大的文件,比如圖片。

4、ContentProvider: 提供一種各個應用之間數據共享機制。以URI的形式提供訪問地址。比如 content://contacts/people(有點REST的感覺)可以訪問系統中的聯系人列表。這裡的URI就可以用來構造Intent對象了。ContentProvider的數據存儲是多種多樣的,可以用數據庫,文件,甚至是存放在網絡的某個地方。

在Android中,注冊一個ContentProvider,不單單是注冊一個共享數據源,還包括數據源對應的Activity。所以Intent(action,Uri),由action和uri共同決定“目的地”。

示例代碼一:

   1: btn.setOnClickListener(new View.OnClickListener() {
   2:             public void onClick(View view) {
   3:                 Log.d(TAG, "startActivityForResult");
   4:                 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people"));
   5:                 startActivityForResult(i, PICK_REQUEST);
   6:             }
   7:         });

如上代碼,在任何應用任何地方,執行以上代碼,結果都是一樣的,就是現實聯系人列表,如下圖:

我們創建的ContentProvider,是一個獨立的類型,實際上跟Activity是沒有關系的,跟應用也沒有沒有。一旦在某個應用的 AndroidMainfest.xml進行配置,並將此應用安裝到Android系統中,activity就和ContentProvider進行關聯,而且這種關聯是多對多的關聯,所以切換Activity的時候時而有多個activity可以選擇。

我不經意產生如下疑問有待解決:

系統如何管理ContentProvider(Uri),以及它們對應的應用(Activity)之間的關系呢?

二、創建一個ContentProvider

1、創建屬性對象

示例代碼二:

   1: package com.halzhang.android.provider;
   2:  
   3: import android.net.Uri;
   4: import android.provider.BaseColumns;
   5:  
   6: /**
   7:  * 屬性對象
   8:  * 
   9:  * @author 張漢國
  10:  */
  11: public final class TodoList {
  12:  
  13:     public static final String AUTHORITY = "com.halzhang.android.provider.TodoList";
  14:  
  15:     private TodoList() {
  16:     }
  17:  
  18:     public static final class Todo implements BaseColumns {
  19:  
  20:         private Todo() {
  21:         }
  22:  
  23:         // content uri
  24:         public final static Uri CONTENT_URI = Uri.parse("content://"   AUTHORITY   "/todos");
  25:  
  26:         // mime類型
  27:         public final static String CONTENT_TYPE = "vnd.halzhang.cursor.dir/com.halzhang.android.todo";
  28:  
  29:         // 單個數據的MIME類型在android中是有Uri和MIME來指定唯一一個Content的
  30:         public final static String CONTENT_ITEM_TYPE = "vnd.halzhang.cursor.item/com.halzhang.android.todo";
  31:  
  32:         // 默認的排序方式
  33:         public final static String DEFAULT_SORT_ORDER = "modified DESC";
  34:  
  35:         public final static String TITLE = "title";
  36:  
  37:         public final static String CONTENT = "content";
  38:  
  39:         public final static String CREATED_DATE = "created";
  40:  
  41:         public final static String MODIFIED_DATE = "modified";
  42:     }
  43:  
  44: }
 

轉自:http://www.cnblogs.com/halzhang/archive/2010/05/28/1746587.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved