線上聊天App研發說明(android學習總結)
阿新 • • 發佈:2019-01-30
初識android確定學習android之後,開始動手,跟之前做過android的同事,要了開發環境和一本電子書《深入淺出Android--Google手持裝置應用程式設計》。書很薄只有一百多頁,週六用一天時間在家一邊看一邊敲例子,一天下來,已經可以寫個身高體重BMI計算的了。有了初步的掌握之後,規劃下要做個什麼App呢,最好涉及多一些內容,例如多執行緒、定時器、網路訪問,最終敲定做個聊天工具,伺服器可以在網上找個jsp的伺服器,用二級域名,這樣最好部署(這個時候我還不瞭解,當前火熱的各種雲應用,公網的伺服器可以放在雲上,貌似也不用花很多錢)。
當然了這樣的設計有一些問題,但是不影響實現規劃的幾個基本功能。
2.1 線上聊天軟體的規劃
我這個線上聊天App只實現一些最基本功能,包括:兩個使用者之間對話,可以廣播對話,可以多個人之間對話 ,簡便起見對話內容只包括文字。設計上,伺服器用jsp的網站,用jsp的內建物件快取資料來模擬伺服器,客戶端通過http的get/post和伺服器互動。腦海中想了下,大的結構很清晰,但是技術細節一個都不會呢,哈哈,這就是剩下的事情了,可以開始下一步了。系統原理:當然了這樣的設計有一些問題,但是不影響實現規劃的幾個基本功能。
2.2 初步掌握的android內容
經過一天的學習,初步掌握了android開發中一些基本的內容,包括:- 搭建android開發環境;
- android工程目錄結構,src原始碼檔案,res資原始檔,R.java等;
- Activity,Activity和UI佈局檔案的繫結,通過R.java引用佈局xml的控制元件;
- 學會了給Button新增響應new onClickListener;
- 對java語言有了初步的使用和適應,初步感覺java比c++寫程式要流暢很多;
- 幾個最基本android控制元件及用法,包括textview、editview、button。
3.線上聊天App
3.1 服務端開發
伺服器端使用jsp的內建物件application,application在WebApp應用啟動後一直存在,所以可以用application儲存一個類物件,這個類物件執行所有伺服器相關任務,進而達到模擬伺服器的效果,經過測試該方式完全可行。jsp端初步的模組設計,各個類。伺服器端和客戶端介面,定義一個xml格式,提供公共介面類生成xml字串、逆向解析xml字串。經過一週的除錯,伺服器端終於可以在瀏覽器中驗證功能了,剩下就是android搭建一個客戶端了,核心的服務終於完成。經過伺服器端jsp的開發,編寫了幾個java類,用了HashMap、ArrayList等資料結構,再次體會到java寫程式很流暢。工程目錄結構:3.2 單元測試
伺服器測試成功,那麼應該寫幾個類測試伺服器,算作是單元測試。編寫Java控制檯程式,編寫IMServer類與伺服器通過HttpClient類互動,完成網路訪問相關,驗證與伺服器的互動。單元測試程式碼結構。3.3 App開發
客戶端開始,功能前面已經確定好,然後腦海中規劃一個初步的介面:有幾個切換按鈕,一個切換當前增在聊天的,一個切換線上的使用者,一個是當前使用者的基本資訊,嗯差不多就這個介面吧。但是呢,我啥都不會呢,先找android的書籍看看,初略的瀏覽一本書提到了android的控制元件,什麼progress、listView、看起來對我有用,好吧先熟悉下控制元件使用,用幾天休息時間敲了幾個控制元件的例子,初步完成技術預研。初步規劃的App的軟體模組3.4 App各分介面
有了一定的控制元件使用基礎之後,開始編寫線上聊天App的各個分介面。主介面TabActivity切換顯示三個Activity,會話Activity,伺服器使用者Activity,我的資訊Activity,對話Activity初步這幾個,每個Activity都不熟悉,在網上搜相關控制元件介面,自己改,把介面相關技術預研完成。介面佈局結構: 清單檔案:[html] view plain copy print?- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.mybmi"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="18"/>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme"android:debuggable="true">
- <activity
- android:name="com.example.mybmi.LoginActivity"
- android:label="@string/app_name">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <activityandroid:name="MainActivity"></activity>
- <activityandroid:name="MainTabActivity"></activity>
- <activityandroid:name="TalkingListActivity"></activity>
- <activityandroid:name="TalkingActivity"></activity>
- <activityandroid:name="UserListActivity"></activity>
- <activityandroid:name="UserInfoActivity"></activity>
- <activityandroid:name="UserIcoList"></activity>
- </application>
- </manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mybmi"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" android:debuggable="true">
<activity
android:name="com.example.mybmi.LoginActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="MainActivity"></activity>
<activity android:name="MainTabActivity"></activity>
<activity android:name="TalkingListActivity"></activity>
<activity android:name="TalkingActivity"></activity>
<activity android:name="UserListActivity"></activity>
<activity android:name="UserInfoActivity"></activity>
<activity android:name="UserIcoList"></activity>
</application>
</manifest>
3.5 介面合併
將前面預研的各個介面整合到一起,加入Activiyt的呼叫程式碼,賦值一些模擬資料,之後整個App可以跑起來了。在AVD中執行,有登陸,有線上使用者列表,有當前會話列表,有個人資訊頁,點選會話列表內容彈出對話頁,已經是一個線上聊天App。但是呢此時還沒有何伺服器互動,下一階段完成伺服器訪問呼叫的程式碼。3.6 伺服器端聯調
經過前面階段App終於要和伺服器通訊了,這才是一個真是的線上聊天軟體。當然和伺服器聯合除錯是比較費時的,介面App有了真實資料後,各種問題都出現了,重新整理不正常,資料沒顯示,類設計不合理等等。經過一週的大量修改除錯完成軟體功能,最終程式碼結構:3.7 介面美化
說是美化其實只作了最簡單的調整,修改介面背景,按鈕背景等。調整後仍然很難看,但是呢顧不了這麼多了,釋出到App市場吧。介面截圖3.8 釋出
至此整個App終於算是達到預期的目前,實現預期的功能。雖然是個學習目的App,但是釋出到App市場,才可以認為這件事情的完成依據。這裡選百度開發者中心,註冊帳號驗證等等上傳發布了這個很挫的App。這件事情算是有了個完美的結束。4 原始碼
5 後記
5.1關於Android
Android開發比windows MFC開發方便很多,沒有大量的巨集定義,純粹的面向物件,UI佈局很容易設計介面。整理這個月的學習的Android開發內容:- 搭建Android開發環境,建立Android工程,新增類、佈局、自加入字串,引用jar庫;
- 建立AVD模擬手機,配置引數等等;
- 佈局方面,線性佈局(水平、垂直),線性佈局應該是最好用的佈局,也最容易設計介面;
- 佈局xml,Android的介面設計很象Html,我也在懷疑Android的介面是否在編譯時沒有生成介面內容,而是在執行時解析介面元素;
- R.java用於引用資源中的各種資源,Android會給每個資源分配一個id,這個Id是自動分配的,重新整理下工程就可以;
- Activity可以認為是視窗介面,Activiyt間的互動:startActivity、Bundle、Inent、setResult;
- Activity的可重寫基類方法,onActivityResult接收另一個Activity傳遞過來的值;
- 所有的控制元件都是View,View類提供的基本的一些方法,如顯示方面:設定字型、設定背景等等;
- TextView、EditView、Button、ImageButton;
- ListView用adapter管理ListView的資料,BaseAdapter;
- TabHost,加入Tab頁籤,Tab頁制定一個Activity;
- 為控制元件新增點選等事件偵聽,例如:Button.OnClickListener onClick = new Button.OnClickListener(){......};
- 執行緒,Handler是Activity中處理Message的類;
- 除錯App,包括Log類,Debug。Toast彈出資訊也可以作為一種除錯手段。
5.2關於Java
Java語言確實很強大,難怪很多人追捧,通過這個月學習到的一些內容:- Java語言編碼風格,例如Java中大括號放在與程式碼同一行,C++會另起一行;
- 所有類都是的積類都是Object,所有任何物件都可以轉為Object。在ArrayList中插入元素取出元素等等;
- 用了兩個資料結構ArrayList和Hashmap,也挺好用的;
- Java中所有類例項必須new,也就相當於所有物件都是指標。而C++如果不new那麼退出作用域自動析構;
- 在實現App是用到interface,Java中不允許繼承多個類,但是可以實現多個interface。Java認為繼承多個類是設計不合理,所以從語言層面禁止多繼承;
- Java類都有豐富的異常資訊,根據異常可以定位到程式碼問題。並且程式碼呼叫了一個會強制拋異常的方法,呼叫程式碼裡面必須catch該異常。