內容介紹
《Android資料庫程式設計》詳細闡述了與Android資料庫程式設計相關的基本解決方案,主要包括在Android系統中存儲數據、使用SQLite資料庫、SQLite查詢、使用ContentProviders、表查詢操作、UI關聯、Android資料庫套用、外部資料庫、數據的收集與存儲以及綜合示例等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
前言
今天,我們生活在一個越來越多地依賴以數據為中心和數據驅動的世界中。如亞馬遜之類的公司對用戶查看和購買的商品進行信息跟蹤,以便能夠向用戶推薦更多類似產品;如Google公司,存儲通過它搜尋的每一條查詢,以便在未來能夠提供更好的搜尋查詢建議;類似Facebook這樣的社交媒體網站會記錄用戶與朋友之間的每一個事件,以便更好地了解數以百萬計的用戶。我們生活在以數據為中心的世界,開發以數據為中心的應用程式正是我們的當務之急。
在過去幾年中,智慧型手機和平板電腦等移動設備的使用量一直呈爆炸式的增長。本書的目的是使用Google已經內置在Android作業系統當中的多種方法來探索數據以及Android系統本身。本書不僅力求讓讀者了解不同的數據存儲方法,還會比較每一種方法的優缺點。最後,希望通過本書,用戶能夠高效創建、精心設計一個可擴展的數據中心應用程式。
本書的結構
第1章(在Android系統中存儲數據):側重於Android系統上所有可用的各種本地數據存儲方法。每個存儲方法都會附帶較多的代碼示例,以及優缺點的比較。
第2章(使用SQLite資料庫):通過介紹自定義SQLite資料庫的實現深入了解最複雜和最常用的本地數據存儲形式--SQLite資料庫。
第3章(SQLite查詢):粗略介紹SQL查詢語言。指導讀者如何構建與任意SQLite資料庫一起使用的功能強大的資料庫查詢。
第4章(使用Content Providers):擴展前面幾章SQLite資料庫的內容,向讀者介紹如何使用Content Provider將其資料庫共享給Android作業系統。介紹一個Content Provider的完整實施過程,並討論了數據公開化的好處。
第5章(表查詢操作):深入探討Android作業系統所提供的最為廣泛的Content Provider套用--Contacts。探討了Contacts表的結構,並提供常見查詢的實例。
第6章(UI關聯):討論用戶將數據關聯到用戶界面的方法。因為數據以列表形式顯示,因此本章的實例介紹了兩種典型的列表適配器。
第7章(Android資料庫套用):嘗試避開程式設計,專注於更高的設計理念。本章講述到目前為止所有可以使用的本地存儲方法,並且強調這些本地方法的不足之處。由此接下來的幾章介紹的都是外部存儲方面的內容。
第8章(外部資料庫):介紹使用外部資料庫的概念,並向讀者介紹幾種常見的外部數據存儲。最後介紹如何創建Google App Engine數據存儲的實例。
第9章(數據的收集與存儲):通過介紹應用程式收集可插入外部資料庫數據的方法,用以擴展前面章節的內容。收集數據的方法包括使用可用的API,也包括編寫自定義的Web抓取器模組。
第10章(綜合示例):本章將會完成第8章和第9章當中開始編寫的應用程式。其中涉及如何首先創建HTTP servlet,其次從移動應用程式中發起對這些HTTP servlet的HTTP請求。本章內容將作為全書的最終目標,向讀者介紹如何將移動應用程式連線到他們的外部資料庫,最後進行解析並以列表形式顯示HTTP回響。
閱讀本書所需基礎
閱讀本書需要了解Android作業系統的基本知識、一個可以創建Android和Google App Engine項目的程式開發集成環境(如Eclipse等),以及需要一個可以完成基本Web請求的網際網路連線。
本書適合的讀者
本書的讀者對象是具有一定資料庫經驗和其他後端設計概念,並且想要了解移動應用程式中如何套用這些概念的開發人員。具有移動應用程式開發和(或)Android平台經驗,但對後端系統和設計、實施資料庫架構都不太熟悉的開發人員,可能會覺得這本書很有用。
即使對於已經具有豐富的Android程式設計和資料庫實施經驗的人員,本書可能有助於他們進一步鞏固概念,並了解Android上更多的數據存儲方法。
體例
在本書中,將會發現一些用來區分不同的信息所使用不同樣式的字型。以下是這些樣式的例子,並附有說明。
在文本中的代碼單詞表示如下:"想要轉換為位元組形式的字元串,傳遞到輸出流的write()方法"。
代碼塊的樣式設定如下:
Set<String> values = new HashSet<String>();
values.add("Hello");
values.add("world");
Editor e = sp.edit();
e.putStingSet("strSetKey", values);
e.commit();
Set<String> ret = sp.getSeringSet(values, new HashSet<String>());
For(String r : ret) {
Log.i("SharedPreferencesExample", "Retrieved vals: " + r);
}
當需要引起對特殊代碼段的注意時,我們將相關的行或條目設定為粗體顯示,如下所示:
<uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
命令行內的輸入或者輸出如下:
adb-s emulator-xxxx shell
新術語和重要的字眼以粗體顯示。
作者簡介
Jason Wei 2011年畢業於史丹福大學,在校期間他獲得了數學計算科學專業的理學學士,同時輔修了統計學專業,接著獲得了管理科學與工程專業的理學碩士,主要研究方向為機器學習。在大學期間的前兩年里,他在矽谷進行第一次創業,而在他第二次創業(BillShrink公司)期間開始接觸到Android系統。
從那以後,他開發了一些應用程式,從小螢幕上的娛樂程式到金融定價與建模工具等。他喜歡使用API進行開發,並參加了一些應用程式開發競賽--贏得了包括Google、MyGengo、IndexTank等公司的獎項。除了開發應用程式之外,Jason還喜歡編寫Android教程,並將自己的開發經驗分享在他的部落格當中(thinkandroid.wordpress.com)。他在部落格當中所獲得的成就,使他第一次成為了《Learning Android Game Programming》一書的技術審校。
目前,Jason在紐約從事量化交易員工作。
關於技術審校
Joseph Lau目前是史丹福大學的在讀研究生,攻讀計算機科學碩士學位。暑假期間,他在LinkedIn和Google的各類技術職位做實習生。他的業餘愛好是Android程式設計,並且編寫了幾個Android應用程式。他認為移動應用程式是21世紀技術創新的關鍵部分,他還認為如果目前還沒有學習Android程式設計,那么現在就是去接觸的最好時機。
Prashant Thakkar(Pandhi)具有7年以上的IT從業經驗。擅長Java,類Struts、Hibernate的J2EE框架,以及相關的開放原始碼框架。Prashant致力於Android已經兩年多,並且還交付過關鍵業務企業移動應用程式。他還對在雲端交付應用程式的Google App Engine感興趣。Prashant在他的兩個部落格中記錄了他的技術經驗,分別是http://ppandhi. wordpress.com和http://androidpartaker.wordpress.com。
目錄
第1章 在Android系統中存儲數據 1
1.1 使用SharedPreferences 1
1.2 SharedPreferences的常見使用案例 3
1.2.1 檢查用戶是不是第一次訪問應用程式 3
1.2.2 應用程式最後一次更新時進行檢查 4
1.2.4 保存應用程式的狀態 5
1.2.5 快取用戶的位置信息 6
1.3 內部存儲方法 7
1.4 外部存儲方法 9
1.6 總結 17
第2章 使用SQLite資料庫 18
2.1 創建高級的SQLite模式 18
2.2 SQLite資料庫封裝器 21
2.3 調試SQLite資料庫 31
2.4 總結 33
3.1 創建SQLite查詢的方法 34
3.2 SELECT語句 35
3.3 WHERE篩選器和SQL操作符 40
3.4 DISTINCT子句和LIMIT子句 42
3.5 ORDER BY子句和GROUP BY子句 45
3.6 HAVING篩選器和聚合函式 50
3.7 SQL及Java間的性能比較 56
3.8 總結 61
第4章 使用Content Providers 63
4.1 ContentProvider 63
4.1.1 實現查詢方法 68
4.1.2 實現delete()和update()方法 71
4.1.3 實現insert()和getType()方法 75
4.1.4 與ContentProvider進行互動 78
4.2 實際套用案例 81
4.3 總結 82
第5章 表查詢操作 83
5.1 Contacts content provider結構介紹 83
5.2 查詢Contacts 85
5.3 修改Contacts 89
5.4 設定許可權 93
5.5 總結 94
第6章 UI關聯 96
6.1 SimpleCursorAdapter與ListView 96
6.2 自定義CursorAdapter 100
6.3 BaseAdapter與自定義BaseAdapter 103
6.4 處理列表互動 109
6.5 對比CursorAdapters與BaseAdapters 110
6.6 總結 111
第7章 Android資料庫套用 113
7.1 本地資料庫套用案例 113
7.2 資料庫快取 117
7.3 典型應用程式設計 119
7.4 總結 120
8.1 外部資料庫的分類 122
8.2 谷歌應用程式引擎GAE與Java數據對象資料庫JDO 124
8.3 GAE:一個視頻遊戲套用的開發案例 125
8.4 PersistenceManager與查詢 128
8.5 總結 136
第9章 數據的收集與存儲 137
9.1 數據收集方法 137
9.2 web抓取入門 139
9.3 擴展HTTP servlet GET/POST方法 150
9.4 調度CRON計畫任務 153
9.5 總結 154
第10章 綜合示例 156
10.1 實現HTTP GET請求 156
10.2 返回至Android系統:解析回響 160
10.3 最後一步:再次關聯到用戶界面 166
10.4 總結 169