前言html
作畢業設計涉及到安卓開發,決定好好學習安卓開發。在正式作畢業設計以前,有必要先設計和完成一個與畢業設計最終成果相關的demo或者說樣例APP。最終畢業設計須要實現的功能包括經過調用PHP端API實現JSON獲取和解析,等功能。而快遞查詢APP剛好具備我最終實現功能大部分的前置效果,故選取製做一個快遞查詢APP來練手java
關鍵詞apache
安卓開發、JSON 、API 、HTTP、畢業設計json
歷程記錄api
平臺和工具(開發、調試、運行)數組
本案例使用的開發工具爲AndroidStudio3.4,在開發嚮導內選擇從安卓4.0以後開始兼容。調試和運行的平臺是建立的虛擬設備pixel2 API24,使用的是基於X86的運行環境。項目選擇「empty project」模板。其餘沒什麼須要設置的了。框架
目錄結構函數
除了建立新空項目產生的默認文件(若是你也在作,爲了確保我未改動部分和你同樣,請務必確保選擇的Androidstudio版本和個人一致,而且最小兼容的版本之類的也和我一致。調試和運行環境與這個生成無關),本人蔘與改動或新增的文件見fig2。其中,綠色表示新建文件,紅色表示修改文件,藍色表示未動的文件/目錄(若是是目錄,則單純指名字未動,總之你確定是看得懂的)。若是你的顯示目錄狀況和個人不同,請將fig1紅色箭頭指向的選項改動到project工具
Fig1.目錄顯示選項佈局
Fig2.項目目錄結構
編輯思路
(1) 佈局
安卓界面的佈局經過撰寫xml格式佈局文件完成。
咱們首先要明白在這個工程中,xml文件的脈絡。那麼在我設計這個的這個簡易快遞查詢中,只有一個界面,這個界面整體是從上到下佈局,其中中間要有一層內再左右佈局兩塊。從上到下第一個模塊是標題,第三個模塊是按鈕,第四個模塊是快遞物流信息展現,第二個模塊用於承載在這個裏面從左到右的兩個模塊,一個是快遞單號輸入框,一個是快遞公司選擇框。
通常說來在進行產品設計的時候,咱們都須要畫一個草圖。市面上有不少的成熟草圖和粗產品設計軟件,可是我也不會用,我也懶得問。對於這種簡易的工程,咱們可大可小。在這種單界面、流程簡單、以學習安卓基本框架爲主的開發流程內,咱們用畫圖軟件畫一下佈局就能夠了。
那麼,咱們在明白了在這樣的一個APP內須要放入什麼樣的內容,就能夠看懂我撰寫的佈局文件activity_main.xml.
其和其餘幾個你在以前所看到的目錄改動的xml文件相互關係如圖:
其中,activity_main.xml爲主佈局文件,可是設計的系統內,文本編輯框內不是空空如也,也有背景顏色(爲了美觀),在從上到下的第三部份內須要承載物流信息,自己須要被定位。因此,單純的一個主佈局文件沒法知足需求。爲了更好的在後期明白邏輯關係,方便修改,因此咱們分離出edit_bg.xml和item_list.xml兩個文件,並連接到activity_main.xml的對應位置。
具體咱們在編輯的文件中給你們展現一下:
(2) 邏輯
該APP的功能實現,咱們首先要明白一個快遞查詢流程是什麼樣子的。那麼在個人這個查詢APP內,是須要客戶手動輸入快遞單號,並選擇快遞公司,才能進行查詢的。信息查詢返回的結果是依靠快遞100(網上瞎搜獲得的一個免費API)的API實現。固然,很明顯若是可以掃碼識別或者是根據快遞單號自動識別快遞公司都是再好不過的。不過這並不影響核心功能,不影響咱們對於功能的抽象。並且,咱們設計出來的功能,只須要保證後續擴展性良好便可。
使用流程大體是:用戶輸入完快遞號碼,選擇完快遞公司,點擊查詢,APP向API發送請求,返回結果,解析結果,展現結果。
那麼咱們再用一個圖片來展現一下:
這時候,咱們已經明白了這個程序用戶交互的一個基本邏輯,那麼咱們圍繞這個基本邏輯,配合安卓開發的相關技巧,實現功能就不是難題啦!
功能實現涉及的額外技術
如今,咱們已經明白了這個APP的基本頁面佈局,完成了草圖樣的界面佈局設計,而且明確了交互邏輯,瞭解了大體的交互流程。那麼在上一節文末,我說在配合安卓開發的相關技巧,這個程序就能夠輕鬆作出。但其實這個相關技巧的範圍太過寬泛了,那麼我如今假定你們已經明白了安卓的權限控制、佈局文件結構和基本java語法,以及java內程序數據如何與界面數據相關聯。這裏簡要介紹兩個與具體業務相關的處理技能。
一個是HTTP請求發送,一個是JSON數據解析。那麼有基礎知識的人應該明白,明白了HTTP的請求方法,咱們就能夠調用API。明白了JSON數據解析的手段,咱們才能夠將返回的原始數據變爲程序展現須要的數據,最終變成你們都能看懂、直觀的最終展現結果。
(1) 安卓內的HTTP請求方法
安卓內HTTP請求等同JAVA下的HTTP請求方法。
關於JAVA下HTTP的請求方法,這裏直接貼出一篇文章:http://www.javashuo.com/article/p-cwtqmqff-a.html
在本APP中,咱們又是如何使用HTTP請求方法實現的API調用呢?
在本程序中,咱們經過撰寫sendRequest()來實現對按鈕點擊事件的響應。因爲在本APP中惟一的按鈕,目的就是爲了把以前輸入和調整好的數據打包送出,發起對快遞100 API的調用,因此至關於這個按鈕點擊的主要做用就是實現HTTP請求調用。
咱們來看一下這個函數的源碼:
在這個APP中,咱們採起apache封裝好的httpclient方法來進行http請求。具體核心語句的解釋能夠看圖。
(2) 安卓內的JSON解析方法,以及展現的代碼撰寫
安卓內JSON解析方法等同JAVA下的JSON解析方法。
這邊也貼出一個介紹java json解析相關的博客地址:http://www.javashuo.com/article/p-qdopdfuo-bs.html
那麼既然咱們須要解析數據,咱們就要看看經過這個api發送請求,到底會獲得什 麼樣的數據。
咱們能夠看到,這個API裏面有兩個參數,一個是快遞公司的拼音(查對應的公司代碼),還有一個就是快遞單號。咱們隨便選擇一家快遞公司,輸入一個錯誤的快遞單號,看到結果如圖。
咱們須要展現的內容就是data後面json數組內的每個小過程。
這裏貼出對應的函數源代碼來:
其實這個函數作的內容就是把以前httpRequest()獲得的數據,處理後填到listView內。
全流程說明
很榮幸,到這裏,個人這個小項目的設計規劃、基本草圖、佈局安排、程序邏輯安排和程序中可能的難點都介紹OK了。固然還有一些細枝末節的東西,我相信若是你想復刻我這個項目,有了上面的綱領性文件,解決那些小問題都so easy!
咱們再用一個圖的形式,看一下這個APP一個具體的處理流程吧!
程序源碼
這裏直接貼出程序源碼的下載地址,本人已經上傳到CSDN。