前言:
在前面介紹過基於對話方塊形式,實現登陸和註冊帳號,沒有細說Android終端和互連網的服務之間的互動實現,
在下面我將說明在在選擇Android傳輸的方案選型分析過程,登陸和註冊介面定義和實現.
1 android傳輸方案分析和選型
在談到android 傳輸方案,一般大家想到的就是
Socket傳輸,基於http的web服務,還有直接是http的post,get擷取方式。
接下來是從 【網路實現條件】,【使用範圍】, 【傳輸優缺點】, 【傳輸資料格式】,【綜合開發成本】,【應用複雜度】等角度分析這三種傳輸方式,做為選擇的判斷條件。
下面是我對這三種傳輸方式的分析。
|
Socket傳輸 |
Web服務 |
Post,get擷取資料方式 |
網路實現條件 |
連接埠:特定連接埠 協議:TCP,UDP (目前無線網路非80連接埠的支援度低。目前移動夢網只支援wap和http協議) |
連接埠 80 協議是http |
連接埠 80 協議是http |
使用範圍 |
資料量大,格式簡單,且即時性要求高的傳輸 |
標準的Web服務介面,介面固定 |
http形式,介面固定 |
傳輸優缺點 |
速度快,資料量小 |
速度一般,資料量大 |
速度一般,資料量一般 |
傳輸格式 |
自訂資料格式 |
SOAP |
Json |
開發要求 |
用戶端和伺服器端:資料拼接,解析,資料完整驗證 開發人員技術要求高 |
用戶端:使用第三方web服務元件,拼接參數,解析回饋資料,過程複雜。 伺服器端:建立web服務 開發人員技術要求:一般 |
用戶端:直接調用android內建的json包解析json資料。過程簡單 伺服器端:產生基於httpHandler的ashx檔案介面 開發人員的技術要求:低 |
綜合成本 |
高 |
一般 |
低 |
綜合以上分析:選擇json+httphandler 的傳輸方式
2 登陸和註冊兩個介面實現
2.1 登陸介面實現
介面定義:
http://192.168.1.1/gointel/UserHandler.ashx?Action=login&Account=xuwenbing&PassWord=xuwenbing
反饋的json格式:
{ActionResult:false,Reason:""帳號和密碼不一致""}
源碼:
View Code /*使用者登陸
* 伺服器檢測使用者的帳號和密碼是否一致,並返回結果
* */
public static Boolean Login(String Account ,String PassWord)
{
//Step One 從伺服器介面中擷取當前帳號和密碼的配對情況
Boolean actionResult=false;
String httpUrl="http://221.181.127.43/gointel/UserHandler.ashx?Action=login&Account="+Account+"&PassWord="+PassWord;
//httpGet 連線物件
HttpGet httpRequest =new HttpGet(httpUrl);
try
{
//取得HttpClinet對象
HttpClient httpclient=new DefaultHttpClient();
// 請求HttpClient,取得HttpResponse
HttpResponse httpResponse=httpclient.execute(httpRequest);
//請求成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{
//取得返回的字串
String strResult=EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(strResult) ;
//擷取傳回值,並判斷是否正確
actionResult=jsonObject.getBoolean("ActionResult");
}
}
catch(Exception e)
{
return false;
}
return actionResult;
}
2.2 註冊介面實現
介面定義:
http://192.168.1.1/gointel/UserHandler.ashx?Action=register&Account=xuwenbing&PassWord=xxuwenbin&NiceName=ninilan;
反饋json格式:
{ActionResult:false,Reason:""使用者名稱已存在""}
源碼:
View Code public static Boolean Register(String account, String passWord,
String niceName) {
Boolean actionResult=false;
String httpUrl="http://221.181.127.43/gointel/UserHandler.ashx?Action=register&Account="+account+"&PassWord="+passWord+"&NiceName="+niceName;
//httpGet 連線物件
HttpGet httpRequest =new HttpGet(httpUrl);
try
{
//取得HttpClinet對象
HttpClient httpclient=new DefaultHttpClient();
// 請求HttpClient,取得HttpResponse
HttpResponse httpResponse=httpclient.execute(httpRequest);
//請求成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{
//取得返回的字串
String strResult=EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(strResult) ;
//擷取傳回值,並判斷是否正確
actionResult=jsonObject.getBoolean("ActionResult");
}
}
catch(Exception e)
{
return false;
}
return actionResult;
}