日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发学习笔记:浅谈Content Provider

發布時間:2023/12/9 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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[]); ?
  • //獲得MIME數據類型 ?
  • 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); ?
  • ????????//?設置TextView顯示的內容 ?
  • ????????tv.setText(string); ?
  • ????????//設置文本字體的大小 ?
  • ????????tv.setTextSize(30.0f); ?
  • ????????//?顯示到屏幕 ?
  • ????????setContentView(tv); ?
  • ????} ?
  • ???????? ?
  • ????public?String?getQueryData(){ ?
  • ???? ?
  • ????????String?string?=?""; ?
  • ????????//?得到ContentResolver對象 ?
  • ????????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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。