初學android的第一個習作

來源:互聯網
上載者:User

標籤:

首發:個人部落格,更新&錯誤修正&回複

項目源碼在這裡,因為github上傳速度太差,傳到了oschina的git託管上。


1.項目結構及技術點

首頁面
使用FragmentTabHost,5個標籤各對應一個fragment,一個fragment即是一個具體的標籤頁。如“部落格”標籤對應的標籤頁為BlogFragment。

部落格標籤頁
技術點:ListView的使用
技術點:通過Intent啟動一個Activity
技術點:使用httpClient和JSON包訪問rest api
部落格顯示頁
技術點:使用webview展示網頁,網頁的html是編程指定的字串

收藏標籤頁
收藏顯示頁
技術點:使用webview展示頁面,指定網頁的url來載入

書單標籤頁

便簽標籤頁
技術點:本機資料庫的查改操作
技術點:ListView的自訂adapter
技術點:相對布局
便簽表單頁
技術點:本機資料庫的增刪操作
技術點:系統服務的調用

管理標籤頁
技術點:登入頁使用本地設定檔儲存使用者名稱密碼
技術點:登入頁的表格版面配置
收藏管理列表頁
技術點:訪問rest api的刪除操作
收藏管理表單頁
技術點:訪問rest api的增改操作


2.關於技術點的體會

布局檔案是與調用者無關的一個單純的xml檔案,代表一個控制項樹,類似寫在<script type="text/plain">標籤中的html片段,只是一段靜態文本,被動地等待被調用。調用者會根據這段xml文本中聲明的樹狀結構,在程式中產生控制項對象樹,控制項對象樹才是與使用者打交道的。
布局方式最常用的是線性布局,可以跨螢幕解析度良好顯示,縱向線性布局嵌套橫向嵌套布局,則很像網頁的div布局,先從上到下,再從左至右。表格版面配置很像網頁中的table布局,確保同列元素的對齊。相對布局對應的就是網頁中脫離文檔流的元素,與之不同的是它可以要求控制項相對一個兄弟節點。

FragmentTabHost實現的標籤頁效果作為首頁面,其各個標籤頁都是Fragment,在標籤頁中進行操作顯示的新頁面,則是Activity。新頁面操作完後在代碼中關閉,或者在新頁面時使用者點擊後退,都會讓該新頁面出棧,返回到上一個頁面,如果關閉的頁面是表單頁,其上一個頁面是列表頁,則列表頁需要在重新顯示的時候重新整理資料,使用Activity生命週期中的方法。
使用ListView顯示列表頁,可以使用原始的Adapter,每行顯示一段字串,如果要顯示更豐富的資訊,需要自訂Adapter和自訂行內配置樣式,Adapter使用實體類名作為布局參數,在響應函數裡方便地使用下標獲得實體做想做的一切。
使用WebView顯示網頁,可以自己指定網頁內容字串,或者指定一個url讓WebView直接載入,前者就像xxDiv.innerHTML="xx",後者則像xxIFrame.src="xx"。相比之下,前者比後者更細膩一點,可以編程決定字串的內容。當然,能想到的最細膩的方式,是使用Jsoup庫控制dom節點,最後產生html字串給WebView載入。

本機資料,除了最暴力的檔案讀寫外,本地設定檔和本機資料庫是可用的選擇。前者適合儲存一些類似全域變數的資料,但是是持久化的(非持久化的存在public static就好了,例如登入時的token,也可以存在全域上下文裡);後者適合儲存有類和實體性質的資料,因為可以寫SQL,操作方式無限類似jdbc。
遠端資料,rest api的訪問採用內建的httpClient和JSON庫可以方便實現,自己封裝了一個簡單的工具類,參數非常類似jquery.post等方法,接受路徑、參數、成功失敗兩個callback函數,其中失敗指的是伺服器返回4xx或5xx狀態代碼,而不是程式中拋出Exception。
關於線程和回調,java web程式員可能不太習慣,在ajax成功後修改頁面顯示是自然而然的,但是在安卓中,耗時操作如訪問api的請求必須放到新線程進行,而新線程不允許修改UI,必須在主線程聲明一個Handler,新線程調用該Handler的sendMessage,可以把這個Handler看做回呼函數。


3.自學感想和下周任務

在java web的自學時,使用servlet和jdbc實現了增刪改查的那天,對自己是個質變,這意味著之後的任何進展,都是在這天的基礎上的最佳化和封裝。因為這天的成績意味著三點,一是具備了對UI的控制力,二是打通了與資料庫之間的通道,三是掌握了重要的原生API。(最重要的是,有了控制感和信心)有了這個底子,日後的各種類庫和架構,只會越來越簡單。
所以這周的進展是比較滿意的,雖然頁面依然很醜,資料連線方法尚未重構到最優,很多參數和方法還不瞭解。但達到了戰略目的:以原生API實現增刪改查的功能,以及對最常用的技術進行摸底。目前項目中沒有引入任何第三方庫,下個星期的任務,就是把玩最流行的最好的第三方庫,通過使用之和閱讀源碼,來反過來增強對基礎API的瞭解。我java web的學習就是這麼過來的。
下個星期的周末,會在github上有個思而勤工作室app2.0版的源碼,其中包含對一些好用的第三方庫的使用的代碼。

上個圖?嗯,歡迎點擊戰國那篇——

apk安裝包在這裡下載。

長期歡迎項目合作機會介紹,項目收入10%用於酬謝介紹人。新浪微博:@冷鏡,QQ:908789432。


初學android的第一個習作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.