1. 程式人生 > >安卓入門---四大元件--ContentProvider

安卓入門---四大元件--ContentProvider

ContentProvider的功能和意義:

為了在應用程式之間交換資料,Android提供ContentProvider,ContentProvider是不同應用程式之間進行資料交換的標準API。當一個應用程式需要把自己的資料暴露給其他應用程式使用時,該應用程式可以通過提供ContentProvider來實現;而其他應用程式需要使用這些資料時,可以通過ContentResolver來操作ContentProvider暴露的資料。

一旦某個應用程式通過ContentProvider暴露了自己的資料操作介面,那麼不管該應用程式是否啟動,其他應用程式都可以通過該介面來操作被暴露的內部資料,包括增加資料、刪除資料、修改資料、查詢資料等。
雖然大部分使用ContentProvider操作的資料都來自於資料庫,但是也可以來自於檔案、SharedPreferences、XML或網路等其他儲存方式。

總結來說就是跨程式之間的資料共享

ContentResolver資料訪問/操作

外界的程式通過ContentResolver介面可以訪問ContentProvider提供的資料,可以通過Context使用getContentResolver()獲得。
資料操作:CRUDinsert(),update(),delete(),query()
Uri引數: Uri是ContentResolver和ContentProvider進行資料交換的標識。兩部分組成–許可權+路徑

具體使用過程如下:得到uri字串後轉化為Uri物件
使用Uri.parse()方法,把字串轉化成Uri物件。
如果查詢:
Cursor cursor=getContentResolver().query{uri,…(其他引數)}

引數 說明
Uri uri 指定某個程式下某張表
String[] projection 相當於要查詢的欄位名
String where 查詢的條件
String[] whereArgs 查詢條件的佔位符插入的引數
String sortOrder 排序方式

讀取系統提供的內容:

系統預設有內容提供器,我們正確的uri就能讀取系統。下面讀取系統聯絡人顯示出來:
讀取

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private
ArrayAdapter<String> adapter; private List<String> contentlist = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contentlist); listView.setAdapter(adapter); readConteats(); } private void readConteats() { Cursor cursor = null; try { cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contentlist.add(displayName + "\n" + number); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } } }

新增許可權:

<uses-permission android:name="android.permission.READ_CONTACTS"/>

這裡寫圖片描述

自定義內容提供器並使用:

自定義內容提供器

自定義MyProvider繼承ContentProvider並實現他的6個方法。
看下這6個方法:

根據uri確定MIME的型別

@Override
public String getType(Uri uri) {
return null;
}

刪除方法

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}

更新方法

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}

插入方法,uri確定插入的表

@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}

查詢方法,uri引數確定那張表

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}

初始化方法onCreate,返回True表示成功

@Override
public boolean onCreate() {
return false;
}

uri的寫法:

類似content://com.example.app.provider/table1 或者再加一個id content://com.example.app.provider/table1/1
content+程式包名+表名+id
關於id的指定,有兩種萬用字元*和#
*–人員長度字串
#任意長度數字
匹配任意表:

content://com.example.app.provider/*

匹配表的任意一行:

content://com.example.app.provider/table1/#

UriMatcher類的使用:

因為Uri代表了要操作的資料,所以我們很經常需要解析Uri,並從Uri中獲取資料。Android系統提供了兩個用於操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便於我們的開發工作。UriMatcher類用於匹配Uri,具體使用如下:
1.例項化UriMatcher物件。

//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼
UriMatcher  sMatcher = new UriMatcher(UriMatcher.NO_MATCH);

2.使用addURL新增uri,接收三個引數

//如果match()方法匹配content://cn.xxt.provider.personprovider/person路徑,返回匹配碼為1

sMatcher.addURI(“cn.xxt.provider.personprovider”, “person”, 1);//新增需要匹配uri,如果匹配就會返回匹配碼

//如果match()方法匹配content://cn.xxt.provider.personprovider/person/230路徑,返回匹配碼為2

sMatcher.addURI(“cn.xxt.provider.personprovider”, “person/#”, 2);//#號為萬用字元

3.呼叫match()方法,傳入uri物件,返回uri的自定義物件,判斷呼叫方呼叫的表。

//使用uri.parse方法使字元型變數變成uri物件
switch (sMatcher.match(Uri.parse("content://cn.xxt.provider.personprovider/person/10"))) {

   case 1

    break;

   case 2

    break;

   default://不匹配

    break;

}

相關推薦

入門---四大元件--ContentProvider

ContentProvider的功能和意義: 為了在應用程式之間交換資料,Android提供ContentProvider,ContentProvider是不同應用程式之間進行資料交換的標準API。當一個應用程式需要把自己的資料暴露給其他應用程式使用時,

入門--四大元件--Service基本用法

Service是什麼 Service(服務)是一個沒有使用者介面的在後臺執行執行耗時操作的應用元件。其他應用元件能夠啟動Service,並且當用戶切換到另外的應用場景,Service將持續在後臺執行。另外,一個元件能夠繫結到一個service與之互動(I

入門之ListView控制元件實現

ListView介紹 安卓中ListView是一種自定義清單表,我們經常在淘寶上搜索寶貝後所出現的上下可滑動的商品列表、QQ/微信訊息列表等都是ListView控制元件來做的,下面紅框框中就是ListView。 有沒有一種豁然開朗的感覺(瘋狂暗示)。。。所以掌握ListView這種

入門--Spinner控制元件與二級聯動詳解

SPinner 父類:AbsSpinner–AdapterView 定義:下拉選單控制元件 常用方法: android:spinnerMode: 1. dialog---對話方塊模式 2. dropdown--下拉模式 dropdown效果

android的常用控制元件總結【入門五】

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。                                             RadioButton單選

入門到進階推薦書籍整理pdf附網盤連結已拿阿里豆瓣offer(珍藏)

轉載自某大佬部落格:https://pymlovelyq.github.io/2018/09/04/An/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好

常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果 常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果

原 安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果 2017年10月28日 12:23:14 低-調

Android 開發:(三)常用控制元件以及仿《微門戶》登入介面實現

一、常用控制元件: 1、文字類控制元件 TextView 負責展示文字,非編輯 EditText 可編輯文字控制元件 2、按鈕類控制元件 Button 按鈕 ImageButton 圖片按鈕 RadioButton與RadioGroup 單

入門之Button事件響應

Android環境 介紹 Android Studio 2.3.3  、Java之後的安卓入門部落格都是在這個環境下進行的。    Button原理簡單分析       眾所周知,button的作用就是響應事件,當but

入門之Activity與Dialog

Activity介紹 安卓中Activity代表頁的意思,也就是☞我們手機上當前的整個介面顯示,點選按鈕等操作可以跳轉到另外一個Activity中。 Activity主要的幾個函式如下:           onCreate( ) :

Android四大元件-ContentProvider

概念: 內容提供器,Android 四大元件之一。 作用: 可以操作非本應用程式的資料,實現跨程序資料共享。 優點: 可以在保證資料的安全性的情況下實現資料跨程序共享。因為contentprovider規範了統一的資料訪問介面。 對底層資料儲存方式抽象,即如果您將底層

常用控制元件——按鈕、影象檢視與影象按鈕

目錄   一、按鈕(Button): 二、圖象檢視(Image View)   2、在XML中的屬性:     3、ImageView的background和src屬性有什麼區別: 三、影象按鈕(ImageButton)

入門系列-01開發工具Android Studio的安裝

谷歌在早幾年就關閉了第三方支援,現在官方主推的開發工具就是Android Studio,所以我的安卓開發也是從as開始的。 1.下載IDE 像安卓這類開發,它不同於其他的程式設計開發,一個好的工具是必須的。Android Studio經過幾年的逐步發展,如今已經是比較好用

設定控制元件的陰影效果:圖層效果LayerList

圖層列表 LayerDrawable 是管理其他可繪製物件陣列的可繪製物件。列表中的每個可繪製物件按照列表的順序繪製,列表中的最後一個可繪製物件繪於頂部。每個可繪製物件由單一 layer-list 元素內的 item 元素表示。 layer-list 對應的 J

入門系列-05常見佈局之RelaiveLayout(相對佈局)

接著上一篇提到的線性佈局,如果說線性佈局是遵循一種順序排放,一處存在一個元件就不會存在另一個。那麼相對佈局則是位置上的相對關係(對於其他元件),不指定相對位置則會堆在一起重疊起來。 1.什麼是相對佈局 相對佈局指的是有參照的佈局方式,就是以某個兄弟元件,或者父容器來決定元

開發5——利用ContentProvider獲取手機聯絡人

目錄 一、實驗內容 二、作業過程和結果 三、完整程式碼 一、實驗內容 使用ContentProvider獲取手機聯絡人。 二、作業過程和結果 1、首先在模擬器中新增幾個聯絡人,作為本專案的獲取目標。         &nbs

手把手教你入門(一)

部落格 學院 下載 GitChat 論壇 寫部落格 發Chat

若水老師 入門學習視訊教程 43集安視訊教程 Android開發從零開始視訊教程

課程目錄:   1.Android開發環境搭建.mp4   10.LinearLayout學習.mp4   11.AbsoluteLayout和FrameLayout.mp4   12.RelativeLayout.mp4   12.RelativeLayout補充.mp4

介面基本元件---按鈕

所有的UI元件裡面,功能最容易被理解的恐怕就是按鈕。安卓UI元件中提供了兩個按鈕:普通按鈕和圖片按鈕,區別在於圖片按鈕顯示的是一個圖片。試想:開發遊戲程式介面,放置一個沒有任何效果的普通按鈕,將會大大降低遊戲的趣味。 由於按鈕比較簡單,所以本篇文章結構也比較簡單。文章前面介

Android四大元件ContentProvider

1.內容提供器簡介 內容提供器(Content Provider)主要用於在不同的應用程式之間實現資料共享的功能, 它提供了一套完整的機制,允許一個程式訪 問另一個程式中的資料,同時還能保證被訪資料 的安全性。目前,使用內容提供器是 Android 實現跨程式共享資料的標準