第一篇 搭建開心網的基本框架
第1章 開發夢緣起開心網 2
1.1 異軍突起:開心網 2
1.2 風靡網絡的開心網是如何煉製的 3
1.2.1 開心網的引爆點 3
1.2.2 開心網的主要功能 3
1.3 編程高手的預言:人人都有開心網 5
1.3.1 自己搭建開心網:絢麗頁麵先睹為快 5
1.3.2 萬丈高樓平地起:技術儲備 6
1.3.3 開心網的安裝和運行 7
1.4 本章小結 10
第2章 SSH整閤鑄就進入開心網的鑰匙:用戶注冊 11
2.1 MVC框架的王者:Struts 2 11
2.1.1 Struts 2與MVC模式 11
2.1.2 Struts 2最新版的下載與安裝 13
2.1.3 通過一個計算加減法的Web程序來體驗MVC模式的好處 13
2.2 絕不重造輪子:Spring 17
2.2.1 Spring與IOC模式 17
2.2.2 Spring最新版的下載與安裝 18
2.2.3 Struts 2和Spring整閤的原理 19
.2.2.4 用整閤Struts 2和Spring的方式重新實現計算加減法的Web程序 21
2.3 數據持久化的最佳利器:Hibernate 25
2.3.1 Hibernate最新版的下載與安裝 25
2.3.2 做一個程序來試一下Hibernate 26
2.4 三位一體:SSH整閤 29
2.4.1 整閤方法一:直接獲得ApplicationContext對象 29
2.4.2 整閤方法二:由Spring創建Action類的對象實例 32
2.4.3 整閤方法三:自動裝配Action類的屬性 34
2.5 利用SSH整閤技術實現基於四層結構的用戶注冊係統 34
2.5.1 編寫映射用戶錶的實體Bean 34
2.5.2 編寫數據訪問層(DAO)組件 35
2.5.3 編寫業務邏輯層(Service)組件 36
2.5.4 編寫RegisterAction類 37
2.5.5 使用Struts 2標簽生成用戶注冊頁麵 37
2.6 本章小結 38
第3章 在用戶注冊和登錄功能中引入Ext JS技術 39
3.1 用戶注冊登錄係統的頁麵及所使用的Ext JS組件 39
3.1.1 經過Ext JS渲染的用戶注冊頁麵 39
3.1.2 經過Ext JS渲染的用戶登錄頁麵 40
3.1.3 注冊和登錄頁麵中所使用的Ext JS組件 40
3.1.4 注冊和登錄頁麵中的對話框和布局 41
3.2 用Ext JS框架實現的絢麗頁麵 42
3.3 揭開Ext JS的神秘麵紗 43
3.3.1 下載和安裝Ext JS框架 43
3.3.2 編寫第一個Ext JS程序 44
3.3.3 頁麵文字的國際化 45
3.3.4 查看Ext JS API 46
3.3.5 查看本地的Ext JS官方文檔和例子 46
3.4 Ext JS的事件 47
3.4.1 注冊和刪除瀏覽器事件 47
3.4.2 Ext JS的基類:Ext.util.Observable 48
3.5 Ext JS中的核心組件 51
3.5.1 所有可視化組件的基類:Ext.Component 51
3.5.2 可設置大小和位置的基類:Ext.BoxComponent 53
3.5.3 容器組件:Ext.Container 54
3.5.4 按鈕組件:Ext.Button 55
3.5.5 麵闆組件:Ext.Panel 56
3.5.6 承載注冊和登錄頁麵的組件:Ext.Window 57
3.6 對話框 58
3.6.1 提醒(Alert)對話框 59
3.6.2 確認(Confirm)對話框 59
3.6.3 輸入(Prompt)對話框 60
3.6.4 等待(Wait)對話框 60
3.6.5 進度(Progress)對話框 61
3.6.6 多行輸入對話框 62
3.6.7 “是(Yes)/否(No)/取消(Cancel)”對話框 62
3.6.8 顯示帶圖像的對話框 63
3.7 錶單組件 64
3.7.1 一切錶單組件的載體:Ext.form.FormPanel 64
3.7.2 文本輸入組件:Ext.form.TextField 65
3.7.3 多行文本輸入組件:Ext.form.TextArea 66
3.7.4 提交信息編碼的隱藏域組件:Ext.form.Hidden 66
3.7.5 顯示年、月、日的組件:Ext.form.DateField 67
3.7.6 顯示時、分的組件:Ext.form.TimeField 68
3.7.7 下拉列錶框組件:Ext.form.ComboBox 68
3.7.8 下拉輸入框組件:Ext.form.TriggerField 69
3.8 讓組件按照自己的意誌進行排列:組件布局 70
3.8.1 垂直錶單布局:FormLayout 71
3.8.2 水平列布局:ColumnLayout 72
3.8.3 Ext.form.FieldSet在布局中的應用 73
3.9 項目實戰:設計注冊係統的頁麵 74
3.9.1 對基本信息布局 74
3.9.2 對輸入個人信息的組件布局 75
3.9.3 對進行校驗碼驗證的組件布局 77
3.10 項目實戰:重新設計服務端組件 78
3.10.1 修改User類 78
3.10.2 重新實現數據訪問層 79
3.10.3 重新實現業務邏輯層 80
3.11 項目實戰:與服務端通信 82
3.11.1 與服務端同步:遠程裝載數據 82
3.11.2 在用戶注冊係統中動態裝載更復雜的數據 83
3.11.3 在用戶注冊係統中提交錶單 87
3.12 項目實戰:用戶登錄係統的實現 87
3.13 本章小結 88
第4章 更完美的改進:擴展用戶注冊和登錄係統 89
4.1 先睹為快:改進後的用戶注冊和登錄頁麵 89
4.1.1 增加瞭用戶校驗功能的用戶注冊頁麵 89
4.1.2 新的用戶登錄頁麵:用4種方式保存登錄狀態 90
4.2 防患於未然:客戶端校驗 90
4.2.1 無論如何要有一個值:非空校驗 90
4.2.2 控製輸入的字符串:最大長度和最小長度校驗 91
4.2.3 隻能輸入數字:NumberField組件 92
4.2.4 使用統一的標準:Ext JS中的內嵌校驗規則 93
4.2.5 更靈活的校驗:正則錶達式校驗 95
4.2.6 隨心所欲的校驗:自定義校驗器 95
4.3 項目實戰:為用戶注冊和登錄係統添加客戶端校驗功能 96
4.4 項目實戰:為用戶注冊係統增加服務端校驗 98
4.4.1 復製客戶端的校驗 98
4.4.2 定義校驗未通過的錯誤信息格式 98
4.4.3 編寫刪除迴車換行符的JSP標簽 99
4.5 項目實戰:為用戶登錄係統增加保存登錄狀態的功能 100
4.5.1 在用戶登錄頁麵添加選擇登錄狀態的ComboBox 101
4.5.2 保存用戶登錄狀態 101
4.5.3 動態生成顯示登錄頁麵的JavaScript腳本 102
4.6 本章小結 103
第5章 開心桌麵:完全模擬Windows桌麵的開心網 104
5.1 模擬Windows XP桌麵效果的開心網 104
5.2 似曾相識:模擬Windows桌麵 104
5.2.1 Ext JS自帶的模擬桌麵的例子 105
5.2.2 工欲善其事,必先利其器:Ext JS的桌麵組件 106
5.2.3 項目實戰:實現類似Windows桌麵的開心網 110
5.3 項目實戰:將圖標擺放在桌麵上 111
5.3.1 編寫描述動態圖標的Java類 111
5.3.2 寫入默認的桌麵圖標設置信息 112
5.3.3 動態生成圖標HTML代碼 115
5.3.4 已登錄用戶的桌麵圖標 118
5.3.5 Ext JS中的拖動技術 121
5.4 項目實戰:控製麵闆 123
5.4.1 鎖定與解鎖圖標 123
5.4.2 重新排列桌麵圖標 125
5.4.3 保存桌麵圖標狀態 125
5.5 項目實戰:控製桌麵圖標 127
5.6 本章小結 130
第二篇 資源與共享
第6章 電子相冊:留住美好瞬間 132
6.1 將美麗留在人間:電子相冊的完美展現 132
6.2 抽象的藝術:Struts 2的文件上傳 133
6.2.1 重要的文件上傳組件:Commons-FileUpload 133
6.2.2 實例:使用Commons-FileUpload組件上傳多個文件 133
6.2.3 抽象和統一:文件上傳的Struts 2沙盒(SandBox) 136
6.2.4 實例:使用Struts 2上傳多個文件 137
6.3 絢麗多彩的Ext JS文件上傳組件 140
6.3.1 簡潔的文件上傳組件 140
6.3.2 實例:使用FileUploadField組件上傳多個文件 140
6.3.3 實例:更完美的文件上傳組件 143
6.4 項目實戰:電子相冊中的圖像上傳功能 145
6.4.1 處理相冊的數據訪問層組件 145
6.4.2 用於創建相冊的業務邏輯層組件 147
6.4.3 保存上傳圖像記錄的數據訪問層組件 148
6.4.4 處理上傳圖像數據的業務邏輯層組件 151
6.4.5 添加相冊的Action類 152
6.4.6 獲得指定用戶的所有相冊的Action類 153
6.4.7 處理上傳圖像的Action類 154
6.4.8 電子相冊在開心桌麵上的圖標和菜單 157
6.4.9 使用Ext JS技術實現圖像上傳頁麵 159
6.5 項目實戰:電子相冊的照片瀏覽功能 162
6.5.1 獲得相冊中照片列錶的Action類 162
6.5.2 傳輸照片數據的Action類 164
6.5.3 用於刪除指定照片的Action類 165
6.5.4 我的照片我做主:照片列錶 166
6.6 本章小結 171
第7章 好友管理:讓我們成為朋友吧 172
7.1 信息共享的第一步:成為朋友 172
7.2 數據的二維錶示法:錶格組件 172
7.2.1 創建第一個錶格 173
7.2.2 阻止移動列和改變列的寬度 175
7.2.3 自定義Grid的列寬度 176
7.2.4 按列進行排序 177
7.2.5 在單元格中顯示彩色的文字、圖、按鈕及其他組件 177
7.2.6 顯示復選框 180
7.2.7 自動顯示行號 181
7.3 錶格分頁 182
7.3.1 為錶格組件添加分頁工具欄 183
7.3.2 從服務端獲得分頁數據 184
7.3.3 將分頁工具欄顯示在網格組件的頂部 186
7.3.4 滑動風格的分頁工具欄 187
7.3.5 帶進度條的分頁工具欄 189
7.4 可編輯的錶格 190
7.4.1 第一個可編輯的錶格 190
7.4.2 嚮錶格添加新行 191
7.4.3 保存數據 193
7.5 屬性錶格組件:PropertyGrid 194
7.5.1 第一個屬性錶格組件 194
7.5.2 不對屬性列排序 195
7.5.3 自定義編輯器 196
7.6 錶格分組 197
7.6.1 對記錄進行分組 197
7.6.2 使用代碼控製分組的展開和摺疊 198
7.7 項目實戰:編寫服務端代碼 200
7.7.1 設計數據錶 200
7.7.2 錶示好友的實體Bean 200
7.7.3 數據訪問層:添加、刪除和獲得好友 201
7.7.4 業務邏輯層:添加、刪除和獲得好友 202
7.7.5 數據訪問層和業務訪問層組件:獲得好友的照片 204
7.7.6 添加好友的Action類 204
7.7.7 刪除好友的Action類 206
7.7.8 獲得好友E-mail的Action類 207
7.7.9 獲得好友照片的Action類 208
7.8 項目實戰:編寫客戶端代碼 209
7.8.1 添加桌麵圖標和開心菜單項 209
7.8.2 創建好友列錶窗口 210
7.8.3 添加好友 212
7.8.4 刪除好友 213
7.8.5 顯示好友的照片 213
7.9 本章小結 215
第8章 日記管理:記錄每天發生的點點滴滴 216
8.1 每天都會有新鮮事發生:寫日記吧! 216
8.2 Ext JS中的窗口 216
8.2.1 建立第一個窗口 217
8.2.2 為窗口增加最大化和最小化按鈕 219
8.2.3 隱藏和銷毀窗口 221
8.2.4 阻止窗口移齣邊界 222
8.2.5 嚮窗口添加按鈕 223
8.2.6 窗口分組 224
8.2.7 窗口布局 225
8.3 布局 227
8.3.1 從最簡單的布局開始:FitLayout 228
8.3.2 邊框布局:BorderLayout 231
8.3.3 拖動和限製BorderLayout布局的區域 233
8.3.4 摺疊和展開子區域 234
8.3.5 伸縮菜單布局:Accordion 237
8.3.6 操作嚮導布局:CardLayout 238
8.3.7 操作位置和大小比例的布局:AnchorLayout 241
8.3.8 用於絕對定位的布局:AbsoluteLayout 243
8.3.9 錶單布局:FormLayout 244
8.3.10 列布局:ColumnLayout 245
8.3.11 錶格布局:TableLayout 247
8.4 項目實戰:編寫服務端代碼 248
8.4.1 設計數據庫 249
8.4.2 錶示每一篇日記的實體Bean 249
8.4.3 數據訪問層組件 250
8.4.4 業務邏輯層組件 253
8.4.5 添加日記的AddDiaryAction類 256
8.4.6 刪除日記的DeleteDiaryAction類 258
8.4.7 修改日記的EditDiaryAction類 258
8.4.8 獲得日記內容的GetDiaryAction類 259
8.4.9 獲得日記列錶的GetDiariesAction類 260
8.5 項目實戰:編寫客戶端代碼 262
8.5.1 添加桌麵圖標和開心菜單項 262
8.5.2 創建日記主頁麵 263
8.5.3 獲得當前用戶的日記列錶 264
8.5.4 添加增加日記的動作 267
8.5.5 編輯和刪除日記 269
8.5.6 查看好友的日記 270
8.6 本章小結 271
第9章 網絡硬盤:重要資料的保險櫃 272
9.1 不怕一萬,就怕萬一:備份重要文件 272
9.2 TreePanel組件的基本應用 272
9.2.1 創建一棵簡單的樹 272
9.2.2 為樹添加子結點 274
9.2.3 讀取服務端的JSON數據 275
9.2.4 讀取本地的JSON數據 277
9.2.5 從Servlet中獲得JSON數據 279
9.2.6 樹的事件 281
9.2.7 右鍵菜單 283
9.2.8 修改結點的默認圖標 284
9.2.9 用對話框顯示結點文本 285
9.2.10 在結點上顯示提示信息 286
9.2.11 將結點設置成超鏈接 287
9.2.12 修改樹結點的名稱 288
9.3 拖放樹結點 289
9.3.1 結點拖放的位置 289
9.3.2 使葉子結點可以追加 291
9.3.3 在樹之間拖放結點 292
9.4 過濾樹中的結點 293
9.5 對樹結點進行排序 294
9.6 工具欄和菜單 295
9.6.1 簡單菜單 295
9.6.2 添加下拉菜單 296
9.6.3 多級菜單 298
9.6.4 嚮菜單中添加分隔綫 299
9.7 高級菜單 301
9.7.1 多選和單選菜單 301
9.7.2 日期和顔色菜單 303
9.7.3 多級的右鍵菜單 304
9.8 工具欄組件 306
9.8.1 Ext.Toolbar.Button組件 306
9.8.2 Ext.Toolbar.TextMenu組件 307
9.8.3 Ext.Toolbar.Spacer組件 307
9.8.4 Ext.Toolbar.Separator組件 307
9.8.5 Ext.Toolbar.Fill組件 308
9.8.6 Ext.Toolbar.SplitButton組件 309
9.8.7 在工具欄上添加HTML標簽 310
9.8.8 在工具欄上添加輸入組件 311
9.9 項目實戰:編寫網絡硬盤服務端程序 312
9.9.1 設計數據庫 312
9.9.2 錶示目錄的實體Bean 313
9.9.3 錶示文件的實體Bean 313
9.9.4 數據訪問層組件:DirDAO 314
9.9.5 數據訪問層組件:FileDAO 316
9.9.6 業務邏輯層組件:DirService 317
9.9.7 業務邏輯層組件:FileService 319
9.9.8 創建目錄的CreateDirAction類 321
9.9.9 刪除目錄的DeleteNetDiskDirAction類 322
9.9.10 獲得子目錄的GetSubDirsAction類 323
9.9.11 獲得目錄中文件列錶的GetNetDiskFilesAction類 325
9.9.12 上傳網絡硬盤文件的NetDiskUploadFilesAction類 326
9.9.13 下載指定文件的GetNetDiskFileAction類 328
9.10 項目實戰:編寫網絡硬盤客戶端代碼 330
9.10.1 添加桌麵圖標和開心菜單項 330
9.10.2 創建網絡硬盤主頁麵 332
9.10.3 創建顯示目錄和文件的樹形組件 333
9.10.4 嚮網絡硬盤主頁麵添加菜單 333
9.10.5 嚮網絡硬盤主頁麵添加按鈕 334
9.10.6 創建文件夾 335
9.10.7 上傳文件 338
9.10.8 刪除目錄和文件 340
9.11 本章小結 340
第三篇 開心時刻
第10章 動他一下:嚮朋友打招呼 342
10.1 與朋友建立交往的第一步:動他一下 342
10.2 Ext JS中的拖放技術 343
10.2.1 什麼是拖放技術 343
10.2.2 拖放的基本應用 343
10.2.3 拖動到指定的區域 344
10.2.4 拖放事件 346
10.2.5 Ext.dd.DD 347
10.2.6 增加拖動把手(Handle) 347
10.2.7 將拖動塊置頂 349
10.2.8 拖放代理(Proxy) 350
10.2.9 設置拖動步長 351
10.2.10 拖動到指定的區域 352
10.2.11 限製拖動的區域 353
10.3 項目實戰:編寫“動他一下”服務端代碼 355
10.3.1 設計數據庫 355
10.3.2 錶示“動作”的實體Bean 355
10.3.3 數據訪問層組件:TouchDAO 356
10.3.4 業務邏輯層組件:TouchService 357
10.3.5 保存“動作”信息的TouchAction類 358
10.3.6 獲得“動作”信息的GetMessageAction類 360
10.4 項目實戰:編寫“動他一下”客戶端代碼 362
10.4.1 添加桌麵圖標和開心菜單項 362
10.4.2 顯示“動他一下”頁麵 364
10.4.3 顯示“動他一下”圖標和選擇好友輸入組件 365
10.4.4 選擇好友 368
10.4.5 登錄或刷新時顯示接收到的“動作” 369
10.5 本章小結 371
第11章 贈送禮物:進一步增進朋友間的感情 372
11.1 最省錢的送禮方式:電子禮物 372
11.2 Ext JS中的數據操作組件 372
11.2.1 異步通信:Ext.data.Connection 373
11.2.2 客戶端的記錄:Ext.data.Record 375
11.2.3 客戶端的二維錶:Ext.data.Store 376
11.2.4 對Store對象中的數據進行排序 377
11.2.5 從Store對象中獲得數據 377
11.2.6 更新Store對象中的數據 379
11.2.7 裝載數據 380
11.3 常用代理(Proxy) 381
11.3.1 MemoryProxy 381
11.3.2 HttpProxy 381
11.3.3 ScriptTagProxy 382
11.4 常用Reader 382
11.4.1 ArrayReader 382
11.4.2 JsonReader 383
11.4.3 XmlReader對象 384
11.5 項目實戰:編寫“贈送禮物”服務端代碼 385
11.5.1 數據庫設計 385
11.5.2 錶示禮物的實體Bean 385
11.5.3 數據訪問層組件:GiftDAO 386
11.5.4 業務邏輯層組件:GiftService 389
11.5.5 獲得動作信息的GetMessageAction類 390
11.5.6 獲得當前用戶所有禮物信息的GetGiftsAction類 390
11.5.7 送禮物的SendGiftAction類 392
11.6 項目實戰:編寫“贈送禮物”的客戶端代碼 393
11.6.1 添加桌麵圖標和開心菜單項 393
11.6.2 顯示贈送禮物頁麵 396
11.6.3 顯示禮物圖像和好友、附言輸入組件 397
11.6.4 選擇好友 399
11.6.5 查看當前用戶收到的所有禮物 400
11.7 本章小結 402
第12章 Ext JS中的常用技術 403
12.1 Ext JS中的常用方法 403
12.1.1 onReady方法 403
12.1.2 get方法 404
12.1.3 getCmp方法 405
12.1.4 getDom方法 405
12.1.5 getBody方法 406
12.1.6 encode方法和decode方法 406
12.1.7 apply方法和applyIf方法 407
12.1.8 Ext.each方法 408
12.2 動態生成HTML 408
12.2.1 使用DomHelper生成代碼片段 408
12.2.2 使用模闆(Template) 411
12.2.3 使用更復雜的模闆(XTemplate) 414
12.3 本章小結 415
第四篇 手機上的開心網
第13章 Android基礎 418
13.1 Android的基本概念 418
13.1.1 Android簡介 418
13.1.2 Android的係統構架 419
13.2 Android開發環境的搭建 420
13.2.1 安裝Android SDK 420
13.2.2 安裝ADT插件 421
13.2.3 建立和運行Android工程 422
13.3 在真實環境中測試Android程序 423
13.3.1 通過USB數據綫進行聯機測試 424
13.3.2 Android LiveCD 426
13.3.3 Android X86 427
13.4 編寫一個移動瀏覽器程序 427
13.5 本章小結 429
第14章 登錄移動開心網 430
14.1 Web Service 430
14.1.1 下載和安裝Axis 2 430
14.1.2 用POJO實現零配置的Web Service 431
14.1.3 使用services.xml文件發布Web Service 433
14.2 在Android中訪問Web Service 436
14.2.1 下載和安裝KSOAP2 436
14.2.2 使用KSOAP2調用Web Service的步驟 436
14.2.3 使用KSOAP2調用零配置的Web Service 437
14.3 實現移動開心網的登錄功能 439
14.3.1 編寫打開數據庫的Database類 440
14.3.2 編寫為登錄服務的LoginService類 440
14.3.3 配置LoginService類 442
14.3.4 設計登錄界麵 442
14.3.5 將SoapObject轉換成User對象 444
14.3.6 編寫登錄界麵的主類:Login 445
14.4 本章小結 447
第15章 移動電子相冊:捕捉精彩瞬間 448
15.1 先睹為快:移動電子相冊 448
15.2 移動電子相冊中使用的組件 449
15.2.1 Button組件 449
15.2.2 TextView組件 449
15.2.3 EditText組件 451
15.2.4 ImageView組件 451
15.2.5 Spinner組件 452
15.2.6 使用Gallery組件循環顯示圖像 454
15.2.7 TabHost組件 455
15.3 訪問網絡 457
15.3.1 HttpGet類和HttpPost類 457
15.3.2 HttpURLConnection類 458
15.4 項目實戰:瀏覽照片 459
15.4.1 編寫CommonServlet類 460
15.4.2 獲取當前用戶的所有相冊 462
15.4.3 設置移動電子相冊的主界麵 464
15.4.4 在客戶端顯示相冊列錶 464
15.4.5 獲取指定相冊的照片路徑 467
15.4.6 獲取指定的照片數據 468
15.4.7 在客戶端分頁顯示照片縮略圖 469
15.4.8 顯示照片大圖 471
15.5 項目實戰:建立相冊 472
15.5.1 編寫建立相冊的服務 472
15.5.2 在客戶端提交相冊信息 473
15.6 項目實戰:上傳圖像 474
15.6.1 服務端接收客戶端上傳的圖像 475
15.6.2 拍攝照片 477
15.6.3 從本地選擇圖像 478
15.6.4 嚮服務端上傳圖像 479
15.7 本章小結 480
第16章 移動日記:隨時隨地記錄生活點滴 481
16.1 先睹為快:移動日記 481
16.2 移動日記中使用的組件 481
16.2.1 ListView組件 482
16.2.2 菜單組件 483
16.2.3 WebView組件 484
16.3 項目實戰:寫日記 485
16.3.1 編寫提交日記內容的服務 485
16.3.2 編寫“寫日記”功能的Android客戶端 487
16.4 項目實戰:瀏覽日記列錶和日記內容 489
16.4.1 從服務端獲取日記標題列錶 489
16.4.2 從服務端獲取日記內容 491
16.4.3 在手機客戶端顯示日記標題列錶 492
16.4.4 利用WebView組件瀏覽日記內容 493
16.5 本章小結 494
第17章 會移動的禮物 495
17.1 先睹為快:隨時隨地贈送好友禮物 495
17.2 GridView組件 495
17.3 項目實戰:贈送禮物 496
17.3.1 獲取好友列錶 496
17.3.2 在Android客戶端顯示好友列錶 497
17.3.3 編寫“贈送禮物”服務 499
17.3.4 嚮好友贈送禮物 500
17.3.5 編寫“贈送禮物”的主界麵 501
17.4 項目實戰:顯示當前用戶獲得的禮物 503
17.4.1 編寫獲得好友贈送的禮物的服務 503
17.4.2 在Android客戶端顯示好友贈送的禮物 505
17.5 本章小結 505
第18章 無處不在的問候 506
18.1 先睹為快:隨時隨地與好友打招呼 506
18.2 ListActivity類 506
18.3 項目實戰:與好友打招呼 508
18.3.1 顯示好友列錶 508
18.3.2 編寫打招呼服務 509
18.3.3 編寫打招呼的客戶端 510
18.4 本章小結 513
· · · · · · (
收起)