一口氣看完驢友源碼,看完驢友源碼
自學安卓也有一年時間了,很快到了要找工作的時候了,但是自己還只做了一個項目,怎麼辦?聽前輩們說,找別人的源碼研究,於是,說幹就幹,我這次找了網上找的一個驢友的源碼,和大家講解下裡面的實現思路,協助大家更快看完一個源碼。為了讀者方面,我也把這個源碼貼出來,有興趣的朋友根據步驟一步一步來。
我們把這個軟體安裝完成後,發現裡面的功能分為四個模組:旅遊記憶,結伴遊,好友/粉絲,其他功能。其中,數其他功能裡面的子模組數最多,所以我們從最多的講起。
使用者註冊:這個功能整體上來說就是在安卓端填寫資訊提交到服務端儲存起來這樣一個需求,所以我們要做的就是寫好安卓端的介面,然後一個提交按鈕,把資料提交到伺服器,怎麼提交呢?驢友是這麼做的:安卓端把使用者資訊以xml的形式裝在一個StringBuilder裡面,然後便是通過一個非常簡單的HttpURLConnection請求,將資料寫到伺服器端,伺服器端的servlet收到了資料就把用戶端提交過來的這些資料儲存到伺服器的MySQL資料庫中,(源碼沒做任何最佳化,我覺得可以加一個資料庫連接池)。伺服器對用戶端提交的資料處理完了以後,給使用者寫響應資料,使用者拿到這些資料判斷是否登陸成功,是的話就轉到主介面。
使用者登陸:這個也很簡單,原理和註冊一樣,也是安卓端寫一個介面,然後使用者提交使用者資訊到伺服器,伺服器也寫一個servlet來處理這些資料,處理過程就是查詢資料庫,看有沒有使用者提交過來的這條使用者記錄,然後給使用者回寫一個響應,使用者根據響應判斷是否登陸成功。
建立記憶:這個也很簡單,說的通俗點,和前面註冊登陸流程沒啥兩樣,還是用戶端寫好介面,提交資料到伺服器,然後伺服器處理資料,把這些資料儲存到資料庫,就這麼簡單。使用者還可以選擇儲存到本地,也就是暫存,點擊暫存按鈕,資料就儲存在Android的sqlite伺服器中。
繼續未發布的訊息:這個也是很簡單,因為建立記憶有暫存到本地Sqlite資料庫,因此,我們就直接把暫存的資料從資料庫裡面取出來,然後裝到一個bundle裡面,通過intent 帶到建立記憶的activity,然後建立記憶的activity對這些資料處理並填充到介面中。
發起結伴遊:原來以為這個會有點不同的,看了以後發現和前面的幾乎沒啥不同,點擊發起按鈕的時候,把使用者填寫的資料發送到伺服器servlet接受處理,然後給使用者一個響應結果,用戶端發過去用的還是StringBuilder存Xml格式,然後伺服器通過Sax解析解析資料儲存到伺服器端的MySQL資料庫。
以上便是“其他功能”這個模組裡面的所有子功能實現。接下來講旅遊記憶模組。
旅遊記憶模組實現步驟,第一步發一條訊息給伺服器,發訊息的格式和上面講的一樣,只是發送的只有一條請求多少條資料的訊息,伺服器得到了使用者要請求的條數後,取使用者需要的條數返回給用戶端,用戶端通過inputStream 拿到服務端返回的資料,通過解析這些資料,把這些資料封裝到集合裡面,然後填充到ListView裡面,顯示給使用者看。
結伴遊模組和旅遊記憶模組類似,請求方式和資料處理方式參照旅遊記憶,但是這個新增了條目點擊,點擊條目跳轉到詳情顯示頁面,通過intent攜帶資料過去顯示。
好友/粉絲模組:
1)因為小生資質愚鈍,裡面的表結構沒看懂,看懂的同學告訴我下。
大體步驟為下:
1.開啟線程t1,使用者請求伺服器擷取服務端資料庫中的好友連絡人清單,得到了好友名單後,通過用戶端的解析,把資料封裝在list容器中(這裡是放在String類型的list中,我覺得可以放在一個BeanList中),也就是所有的好友。
2.開啟線程t2,擷取粉絲資料,方法和t1一樣,通過請求伺服器擷取到所有粉絲的list。
3.開啟線程t3,擷取所有好友申請的資料,然後也是裝在好友申請的list中。
4.把擷取到的這些資料填充到expandableListView裡面,中間用到了onCreateContextMenu,百度之,發現這個東西和onCreateOptionMenu的最大區別在於前者是針對每一個View的,而後者只是針對當前activity的,只要給某一個view註冊了contentMenu,長按這個view的時候都會響應菜單彈出事件,這個菜單和activity的菜單當然是區分開的。源碼中對每一個expandableListView的item都註冊了相應的contentMenu,當使用者長按的時候會有不同響應事件,然後通過調用onContextItemSelected處理菜單點擊事件。以拒絕好友請求為例,當使用者選擇拒絕好友請求,響應事件就是向伺服器的DeleteApplyServlet發送請求,然後伺服器端刪除這條請求記錄。其它類似。
這樣一個源碼大致瞭解了,需要深入的朋友可以仔細看看源碼,裡面確實有些可以借鑒的地方。