Android系統中提供了SQLite資料庫,用于本地的資料存儲,App連結到網絡就要用到專門的服務應用。目前已經存在了服務應用,想要開發一個Android移動應用用來享用已有的Web服務應用,這類似于傳統的Client -Service。無論是B/S模式還是C/S模式,開發應用和業務處理,服務提供,資料存儲等都不可缺少。Android很好的解決了這一問題,在現有的Web服務基礎上,搭建用戶端應用程式,共享已有的服務。
Apache開源項目中将Http協定通路做了一個二次封裝,使得用戶端應用程式通路Web伺服器能夠像浏覽器通路一樣友善(Apache-httpClient),正好Android SDK中提供了這個開源元件,為開發用戶端應用程式通路伺服器提供支援。
關于Android用戶端通路Web伺服器與傳統的Web應用的架構如下圖:
<a href="http://blog.51cto.com/attachment/201212/171340665.png" target="_blank"></a>
搗鼓了Android APP 通路Web伺服器之後,最大的感受是C/S模式和B/S模式的概念開始模糊了,對通路模式的考慮在技術方面将淡化,而更多是使用者的計算機處理能力,并發通路量,通信實時性,可靠性,資料傳輸量,安全性這些方面衡量。
想到關于B/S模式和C/S模式的糾結權衡在這個體驗過後,應該不會再有太多技術可行性上的糾結,而更多的精力投入到對程式的運作環境,功能,使用者體驗等方面思考和設計。
關于享用已有的Web服務,開發Android用戶端應用程式的大緻流程總結如下:
1.對傳統Web應用的MCV架構中的Servlet控制做相應的擴充,在不影響已有的系統的前提下,對用戶端(浏覽器,Android應用)請求進行判斷,擷取不同類型的請求響應資訊。
例如下面代碼:
package org.estao.servelet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.estao.business.ActionBusiness;
import org.estao.business.ActionManager;
import org.json.JSONException;
import org.json.JSONObject;
public class SettingServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -4384397961898281821L;
private ActionBusiness actionBusiness;
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
doPost(request, response);
public void doPost(HttpServletRequest request, HttpServletResponse response)
PrintWriter out = response.getWriter();
JSONObject jsonObject=new JSONObject();
boolean result=actionBusiness.validSetting(jsonObject);
try {
jsonObject.put("Result", result);
} catch (JSONException e) {
e.printStackTrace();
}
out.println(jsonObject.toString());
out.flush();
out.close();
public void init() throws ServletException {
actionBusiness=ActionManager.getAppBusiness().getActionBusiness();
}
上面代碼是獲得JSON格式對象,作為響應資訊。
2.在Android應用中以Http協定的方式通路伺服器,使用Apache-httpclient開發包,或者進行适用于應用的再次封裝。
例如下面代碼:
package org.estao.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
*
* @author Ajax
* @message Just For JSON Object Transport
*
*/
public class HttpUtil {
// 建立HttpClient對象
public static final HttpClient httpClient = new DefaultHttpClient();
// 通路Web伺服器基礎路徑
public static final String BASE_URL = "http://10.43.10.108:8080/estao/";
* GET方式無參數請求
* @param 發送url請求
* @return 伺服器相應的字元串
* @throws IOException
public static String getRequest(String url) {
HttpGet get = new HttpGet(url);
HttpResponse httpResponse = null;
String result = null;
// 發送GET請求
httpResponse = httpClient.execute(get);
// 伺服器端傳回相應
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 擷取伺服器相應的字元串
result = EntityUtils.toString(httpResponse.getEntity());
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
return result;
* POST方式帶參數請求
* @param rawParams
public static String postRequest(String url, Map<String, String> rawParams) {
HttpPost post = new HttpPost(url);
List<NameValuePair> params = new ArrayList<NameValuePair>();
for (String key : rawParams.keySet()) {
// 封裝請求參數
params.add(new BasicNameValuePair(key, rawParams.get(key)));
// 設定請求參數
post.setEntity(new UrlEncodedFormEntity(params, "GBK"));
// 發送POST請求
httpResponse = httpClient.execute(post);
// 如果伺服器成功的傳回相應
//擷取伺服器響應的字元串
result=EntityUtils.toString(httpResponse.getEntity());
3.開發Android應用程式,對JSON(或者其它格式資料互動對象)進行處理,擷取需要的資訊。
Android應用開發相對于已有的Web服務應用而言是獨立的,可以将應用程式對伺服器的請求和響應重新抽象一層,在已有的Web服務請求響應的控制層進行擴充和特定格式的資料資訊封裝。
本文轉自 secondriver 51CTO部落格,原文連結:http://blog.51cto.com/aiilive/1104088,如需轉載請自行聯系原作者