生活随笔
收集整理的這篇文章主要介紹了
Android开发学习笔记:浅谈Content Provider
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.Content Provider的概念介紹
Content Providers是所有應用程序之間數據存儲和檢索的橋梁,它使得各個應用程序之間實現數據共享。是應用程序間共享數據的唯一途徑。Content Provider 主要的功能就是存儲并檢索數據以及向其他應用程序提供訪問數據的接口。其中包括添加,刪除,查詢,更新等操作。
在Content Provider使用過程中,還需要借用ContentResolver對象間接來操作ContentProvider來獲取數據。ContentResolver通過應用程序的getContentResolver()方法獲得。一般情況下,ContentResolver是單實例的,但是可以有多個ContentResolver在不用的應用程序和不同的進程之間和ContentResolver交互。
二.Content Provider的簡介
1.Content Provider的常用方法
?query(Uri,?String[],?String,?String[],?String); ??insert(Uri,?ContentValues); ??update(Uri,?ContentValues,?String,?String[]);? ??delete(Uri,?String,?String[]); ??getType(Uri);? 2.數據模型
Content Provider 將其存儲的數據以數據表的形式提供給訪問者,在數據表中每一行為一條記錄,每一列為具有特定類型和意義的數據。每一條數據記錄都包括一個 "_ID" 數值字段,改字段唯一標識一條數據。
| _ID | NUMBER | NUMBER_KEY | LABEL | NAME | TYPE |
| 13 | (425) 555 6677 | 425 555 6677 | Kirkland office | Bully Pulpit | TYPE_WORK |
| 44 | (212) 555-1234 | 212 555 1234 | NY apartment | Alan Vain | TYPE_HOME |
| 45 | (212) 555-6657 | 212 555 6657 | Downtown office | Alan Vain | TYPE_MOBILE |
| 53 | 201.555.4433 | 201 555 4433 | Love Nest | Rex Cars | TYPE_HOME |
3.URI
URI,每一個Content Provider 都對外提供一個能夠唯一標識自己數據集(data set)的URI, 如果一個Content Provider管理多個數據集,其將會為每個數據集分配一個獨立的URI。Content Provider就是通過URI對象來共享其數據的。
URI的格式圖如下:
?各個部分的組成:
A:標準前綴,是固定的,"content://"是用來標識數據是由Content Provider管理的 schema。
B:URI的標識,它定義了是哪個Content Provider提供這些數據。對于第三方應用程序,為了保證URI標識的唯一性,它必須是一個完整的、小寫的類名。這個標識在 元素的 authorities屬性中說明:一般是定義該ContentProvider的包.類的名稱
C:需要訪問的數據字段名稱。
D:如果URI中包含表示需要獲取的記錄的_ID;如何有D部分,則就返回該_ID對應的數據,否則表示返回整張表的數據?
三.Content Provider實例
Anroid系統自帶的Content Provider對象
獲得系統聯系人信息(姓名和手機號碼)的例子
MainActivity.java
package?com.lingdududu.provide; ??import?android.app.Activity; ?import?android.os.Bundle; ?import?android.provider.ContactsContract; ?import?android.provider.ContactsContract.PhoneLookup; ?import?android.database.Cursor; ?import?android.graphics.Color; ?import?android.widget.TextView; ?import?android.content.ContentResolver; ??public?class?MainActivity?extends?Activity?{ ?????public?void?onCreate(Bundle?savedInstanceState)?{ ????????????? ?????????super.onCreate(savedInstanceState); ?????????TextView?tv?=?new?TextView(this); ?????????String?string?=?getQueryData(); ??????????????????tv.setTextColor(Color.BLUE); ??????????????????tv.setText(string); ??????????????????tv.setTextSize(30.0f); ??????????????????setContentView(tv); ?????} ????????? ?????public?String?getQueryData(){ ????? ?????????String?string?=?""; ??????????????????ContentResolver?cr?=?getContentResolver(); ??????????????????Cursor?cursor?=?cr.query(ContactsContract.Contacts.CONTENT_URI,?null, ?????????????????null,?null,?null); ??????????????????while?(cursor.moveToNext())?{ ??????????????????????????int?nameFieldColumnIndex?=?cursor ?????????????????????.getColumnIndex(PhoneLookup.DISPLAY_NAME); ?????????????String?contact?=?cursor.getString(nameFieldColumnIndex); ??????????????????????????String?ContactId?=?cursor.getString(cursor ?????????????????????.getColumnIndex(ContactsContract.Contacts._ID)); ?????????????Cursor?phone?=?cr.query( ?????????????????????ContactsContract.CommonDataKinds.Phone.CONTENT_URI,?null, ?????????????????????ContactsContract.CommonDataKinds.Phone.CONTACT_ID?+?"="?????????????????????????????+?ContactId,?null,?null); ?????????????while?(phone.moveToNext())?{ ?????????????????String?PhoneNumber?=?phone ?????????????????????????.getString(phone ?????????????????????????????????.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); ?????????????????string?+=?(contact?+?":"?+?PhoneNumber?+?"\n"); ?????????????} ?????????} ?????????cursor.close(); ?????????return?string;?????? ?????} ?}? 注意:記得在AndroidManifest.xml加上17行的權限聲明
<?xml?version="1.0"?encoding="utf-8"?>?<manifest?xmlns:android="http://schemas.android.com/apk/res/android"???????package="com.lingdududu.provide"???????android:versionCode="1"???????android:versionName="1.0">?????<uses-sdk?android:minSdkVersion="10"?/>??????<application?android:icon="@drawable/icon"?android:label="@string/app_name">?????????<activity?android:name=".MainActivity"???????????????????android:label="@string/app_name">?????????????<intent-filter>?????????????????<action?android:name="android.intent.action.MAIN"?/>?????????????????<category?android:name="android.intent.category.LAUNCHER"?/>?????????????</intent-filter>?????????</activity>?????</application>?????<uses-permission?android:name="android.permission.READ_CONTACTS"/>??? ?</manifest>? 通訊錄中聯系人的信息:
效果圖:
?
?
轉載于:https://blog.51cto.com/liangruijun/667264
總結
以上是生活随笔為你收集整理的Android开发学习笔记:浅谈Content Provider的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。