ContentProvider與資料共享

Slides:



Advertisements
Similar presentations
许瑞云医师 你已经很努力地注意饮食、作息、运动, 为什么身体还不能恢复健康 ? 细节 答案就在「 细节 」裡, 唯有掌握关键的一步, 养生才能达到真 正的功效 ! 现在就让我们跟着曾是全球知名的哈 佛医院主治医师的许瑞云, 学习最正确 的养生方法, 轻松打下健康满分的基础 !
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
教務處註冊組 /7 (二) 10 : 00 至 15 : 00 止 ★ 6/8 彙整報名資料後, 6/9 向高中承 辦學校報名 ★ 因校內作業時間緊迫,逾時恕不 受理。 校內報名時間.
Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
三水区安监局 企业安全用电 2013年4月.
数据存储.
企业价值收益法评估 ----财务报表调整 主讲人:阮咏华 1.
十一 ASP对数据库的访问.
校园信息管理系统 河北科技大学网络中心 2000/4/10.
职 业 礼 仪 讲师:刘巍女士.
99年成語200題庫(21-40).
李建民 教授 北京百川健康科学研究院 脊柱健康技术研究中心
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
低碳生活,从小事做起 编辑人:刘瑞兴 指导老师:麦文燕 吴霞 编辑地址;岭南师范学院附属中学 编辑时间:
三大自然区的内部差异 地理 全日制普通高级中学教科书(选修) 第二册 人民教育出版社地理社会室 编著 人民教育出版社 关于.
Part 2 開發Android應用程式的流程
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
俄语字母的发音体系 阅读规则.
閱讀深耕天使獎 參加者﹕J 胡庭瑋.
報告人:古博文 彰師大運動健康研究所副教授 人權教育基金會執行長 100年8月
授課大綱 第一章 緒 論 第一節 應用文的意義 第二節 應用文的種類 第二章 書 信 第一節 書信的種類 第二節 書信的結構 第三章 便 條
班級:四資工3B 指導老師:林建良 組員: 姚維杰、 林育誠、許耿銘
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
JAVA 程式設計與資料結構 第十一章 JDBC.
實驗四:單位轉換程式.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
資料庫系統 Database Systems
第10章 App微信分享的实现 倚动实验室.
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
資料庫安全 (Database Security)
第8章 Android内容提供者(ContentProvider)应用
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
Android智慧型手機程式設計實務應用班
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
ANDROID PROGRAMMING2.
第10章 儲存偏好設定、檔案與資料庫 10-1 存取偏好設定 10-2 檔案存取 10-3 關聯式資料庫與SQLite
ProQuest Administrator Module (PAM) 使用說明
實驗十四:顯示與控制地圖.
Java程序设计 第9章 继承和多态.
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
Android 视频教程简介.
Git & github By 宋正倫 (修訂by jmchen).
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
實驗十一:待辦事項程式 (儲存在手機上).
第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、
Android Application Component
網路應用.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
用例.
Ch17 SharedPreference與檔案應用
SAP Query 建立User Group (SQ03) 建立Infoset (SQ02)
Location Based Services - LBS
SQL查询语句 蔡海洋.
第三章 SQL Server数据管理.
微信商城系统操作说明 色卡会智能门店.
2.1 高職與私立學校註冊操作說明 (2015/9/15上線)
新竹縣108學年度第1次國小以上 特殊教育鑑定安置說明會
聚合型第一種:隱沒帶、島弧 例子:臺灣東方的琉球海溝、南美洲智利海溝. 聚合型第一種:隱沒帶、島弧 例子:臺灣東方的琉球海溝、南美洲智利海溝.
實驗十六:匯出APK安裝檔與軟體上架.
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
Android进程间通讯.
SQLite資料庫 靜宜大學資管系 楊子青.
Presentation transcript:

ContentProvider與資料共享

Android系統雖然可以同時執行多個應用程式,但各應用程式是各自獨立的,不但有自己的處理程序,同時也具有自己特定的資料儲存空間,而這空間內的資料是完全私有的,其他應用程式無法使用。 這樣設計的好處是安全,資料完全由自己管理,避免資料誤用與損壞的機會,但也造成因為應用程式無法共享資料,降低了資料重覆使用的彈性。

為了解決這個問題,Android SDK提供了「Content Provider」的概念;Content Provider就如同應用程式資料之間的橋樑,讓應用程式可以透過這座橋樑共享資料,不過橋樑的通行權卻仍在我們手中控制,使應用程式之間有共享資料的彈性,但也仍然為資料提供了適當的保護。

一、認識Content Provider 內容提供者(Content Provider)是Android SDK提供的一個抽象類別,可用以保存及管理資料,更是應用程式之間共享資料的唯一方法。 非資料擁有者的應用程式要從Content Provider存取資料,必須透過「ContentResolver」物件,此物件就如同Content Provider的客戶;ContentResolver對Content Provider的實體提出需求,Content Provider依需求執行必要的動作並回傳動作的結果。

「ContentResolver」物件具有處理資料「CRUD」 (Create:建立、Retrieve:讀取、Update:更新、Delete:刪除)的方法,這些方法會呼叫Content Provider實體物件中的同名方法。 重要的CRUD方法定義如下: 查詢:public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 更新:public final int update (Uri uri, ContentValues values, String selection, String[] selectionArgs)

新增:public final Uri insert (Uri url, ContentValues values) 刪除:public final int delete (Uri url, String selection, String[] selectionArgs) 前面方法定義中,第一個參數都是Uri物件類型的參數,這參數主要是用來識別內容提供者內部資料,它由3個部分組成:以「content://」開始的起始部分;後面接著provider套件名稱,稱為授權(authority);最後為可選擇部分的資料類型與記錄的識別碼(ID)。

要provider提供資料,請求的應用程式必須先在自己的AndroidManifest 要provider提供資料,請求的應用程式必須先在自己的AndroidManifest.xml組態檔申請此provider的使用許可(uses-permission)。如果只是要讀取資料,申請provider的讀取使用許可即可;如果會變動資料(更新、新增與刪除),則還需要申請provider的寫入使用許可。

二、使用Contacts Provider 聯絡簿是個相當複雜的SQLite資料庫,內含有3個資料表: ContactsContract.Contacts資料表:其中每一筆記錄(即一列)相當於一位聯絡人的資料。 ContactsContract.RawContacts資料表:每一筆記錄相當於一位聯絡人的資料摘要,特別是使用者帳號與類型。 ContactsContract.Data資料表:每一筆記錄為聯絡人原始資料的細節,如Email、電話等。

在模擬器(或實際Android裝置上) 為連絡簿增加連絡人資料,請依以下步驟進行: 啟動模擬器。 敲Home螢幕下方的「Contacts」(聯絡簿)圖示。

載入聯絡簿資料庫,此資料庫初始狀態為空的,在開啟的畫面中有3個按鈕分別執行:新增聯絡人、登入帳號、匯入聯絡簿等工作,利用第1個按鈕為聯絡簿增加4筆聯絡人記錄。

敲「Create a new contact」鈕,出現訊息通知因為無帳號,此聯絡簿將無法備份,詢問是否要增加帳號?因為只是要以此聯絡簿資料庫進行練習Content Provider,因此請選「Keep local」鈕。 輸入聯絡人姓名,然後敲返回鈕將資料儲存。

按螢幕右下角增加記錄圖示,繼續增加另外3筆 記錄,記錄內容為「Chen」、「Len」、「Hang」、「Dan」。

ContactProvider Test範例 範例將提供2個主要按鈕「Query」與「Insert」。 按下「Query」按鈕,會顯示聯絡人姓名,並提供另一個「Next」按鈕,讓使用者可以透過此鈕逐筆顯示其他聯絡人姓名。 按下「Insert」按鈕,程式將以目前畫面上的姓名新建一筆聯絡人記錄,因此按此鈕之前要記得先輸入資料。 範例需於AndroidManifest.xml檔中設定聯絡簿讀取(READ_CONTACTS)與寫入許可(WRITE_CONTACTS)。 範例詳細內容請參考原書。

三、建立自己的Content Provider 建立自己的Content Provider其實就是建立延伸自Content Provider的子類別,建立時應注意以下3點: 決定提供資料的方式 Content Provide可以用2種方式提供資料:檔案或SQLite資料庫。 設計Content URI Content URI的目的是識別Provider內的資料,在Content Provide必須實作的方法中,除了「onCreate()」方法以外,呼叫時都必須提供Content URI。

實作Content Provider需要的方法 為了協助依Content URI內容執行不同的處理,我們可以用「UriMatcher」物件透過樣本比對的方式,將方法中的Content URI參數映射到整數常數,然後以switch架構為此參數選擇適合的處理動作。 URI樣本可以用UriMatcher物件的「addURI()」方法加入,樣本中可以有2種萬用字,其中「*」表示任意個數的字元,而「#」表示任意位數的數字。 實作Content Provider需要的方法 因此定義Content Provider抽象類別子類別時必須實作6個方法:query()、insert()、update()、delete()、getType()、onCreate() 。 getType(Uri):這方法回傳一個MIME格式的字串,此字串描述Content URI參數回傳的資料型式。 onCreate():此方法回傳表示建立是否成功的布林值,在這方法內應該只進行一些簡單的初始化工作。

CustomProvider Test範例 建立一個可以對外提供SQLite資料庫資料的Content Provider 。 自建的Provider必須在組態檔AndroidManifest.xml中宣告它的名稱與授權字串,這樣才能從外部透過此Provider存取資料。 範例的Provider要提供SQLite資料庫資料,因此我們也需要建立一個SQLiteOpenHelper子類別(EmployeeDatabaseHelper),幫助我們管理資料庫內容。

範例使用的資料庫為「Company.db」,它含有一個「Employee」資料表,資料表每一筆記錄有4個資料欄:_id,為整數型式的主鍵值,內容自動產生;name,存放員工姓名的字串型式資料欄;age,存放員工年齡的整數型式資料欄;salary,存放員工薪資的整數型式資料欄。 建立ContentProvider子類別EmployeeProvider作為Employee資料表的提供者,在此Provider中,除了實作必要的6個方法以外,我們也定義了Provider的Content URI,此Content URI設計成可以指向整個資料表,或只指向資料表中的一筆記錄。

為了決定資料需求者提出的處理需求是資料表或單筆記錄,我們以UriMatcher物件比對資料需求者提供的Uri資料,並依據比對的結果執行不同動作。 在資料需求者的活動佈局中,以TextView元件顯示記錄_id資料欄的內容,以3個EditText元件顯示記錄其他資料欄的內容,另以4個按鈕分別控制記錄顯示(下一筆)、更新、新增、刪除等功能。 資料需求者以ContentResolver物件將資料處理需求傳給Provider,再由Provider實際處理資料。 範例詳細內容請參考原書。

對於資料需求程式而言,使用外部資料庫或自己私有的資料庫,其實變化並不大,主要的差別在於使用自己的私有資料庫時,是透過SQLiteOpenHelper協助存取資料;而使用外部資料庫的時候,則必須借助Content Provider的幫忙。 但更重要的一點是,在資料處理上的方法(query、update、insert、delete),二者也幾乎完全相同,只是使用Provider時要多提供一個Content URI資料。