如今,安卓app幾乎普及到我們每個人。作爲開發者,我們都知道,我們所使用的軟件APP,絕大多數都是移動端+WEB服務端,那麼怎麼讓安卓客戶端跟web服務端通信,可能對一些剛接觸安卓的學習者來說可能是一個難點。下面通過一個簡單的例子(服務端以JSP爲例,GET請求),讓一些剛接觸的學習者學習一下怎麼讓兩者建立通信,併發送數據與接收返回的數據。
可能類似於一些驗證的功能,只要需要驗證一下是否信息是否匹配,此時,服務端(JSP)只要返回給開發者一個表示正確或者錯誤的信息,例如登錄的時候驗證成功返回一個“登錄成功”的字符串給客服端,開發者根據返回的消息作下一步的操作。
先在服務端(JSP)寫好,要返回給客服端的內容,以一個簡單的登錄功能爲例:
<body>
<%
String id = request.getParameter("id");//接收從客戶端發送過來的賬號
String rpwd = request.getParameter("pwd");//接收從客服端發送過來的密碼
// System.out.println(studentid+"\t"+rpwd);
ServerDatabase serverdb = new ServerDatabase();
serverdb.connSQL();
String check = "select upwd from user where id='"+id+"'";
ResultSet resultSet = serverdb.selectSQL(check);
//驗證成功爲true,不成功爲false
if (resultSet.next()==true){
if(rpwd.equals(resultSet.getString("upwd"))){
response.getOutputStream().print("登錄成功");//賬號密碼都正確返回的內容
}else {
response.getOutputStream().print("密碼錯誤");//密碼錯誤返回的內容
}
} else{
response.getOutputStream().print("該賬號不存在");//賬號不存在返回的內容
}
%>
</body>
其中ServerDatabase爲自己定義的類,是對數據庫一些操作的類,具體的代碼就自己寫啦,這個就不多說啦。其次就是用安卓客服端發送數據
先創建一個Handle類對數據的一些操作
private Handler handler = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
switch(msg.what){
case 0:
String response = (String)msg.obj;//這個是JSP返回來的消息,但是要對其進行解析
int index = response.indexOf("<body>");
int index_end = response.indexOf("</body>");
//解析獲取關鍵內容
String response_str = response.substring(index+"<body>".length(),index_end);
//在這裏做一些其它操作如 驗證接收到的消息爲if(response_str.tirm().equals("登錄成功")){
//登錄成功的相關操作如:跳轉到其它頁面之類的
}
break;
default:
break;
}
}
};
然後再定義一個類發送來對數據的發送與接收
private void sendRequestWithHttpClient(){
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://172.16.0.103:7001/driver-admin/user_tool/login_get.jsp?student_id=123456&pwd=123456");
//172.16.0.103爲服務端的Ip,7001爲端口號,後面爲服務端的路徑與發送的數據
try{
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode() == 200){
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity,"utf-8");
Message message = new Message();
message.what = 0;
message.obj = response.toString();
handler.sendMessage(message);
}
} catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
這樣一收一發,就讓安卓與JSP服務端建立起了通信了。下面來說一說返回讓服務端返回JSON數據的,跟客服端對JSON數據的解析
特別注意的事,JSP要將數據封裝爲JSON數據,首先要先導入JSON的幾個依賴JAR包,如圖所示:
jar包下載地址:https://download.csdn.net/download/baidu_38345181/10612553
這幾個包缺一不可,少了一個都會報錯。
在JSP中包裝JSON數據,代碼跟上面的差不多,我就不全部都貼出來了,就截部分代碼出來就好
Map<String,String> map = new HashMap<String,String>();
map.put("studentid",studentid);
map.put("username", username);
map.put("sname",sname);
map.put("pid",pid);
map.put("tel",tel);
map.put("origo", origo);
map.put("address",address);
JSONObject info = JSONObject.fromObject(map);
response.getOutputStream().println(info.toString());
在安卓客戶端裏對發送過來的數據進行解析,通過鍵值去獲取相應的內容,關鍵代碼如下
try {
JSONObject obj = new JSONObject(response);
JSONObject clarray = obj.getJSONObject("data");
JSONObject wearray = clarray.getJSONObject("class");
JSONArray array = wearray.getJSONArray("mon");
String txt = null;
for(int i = 0 ; i<array.length();i++){
JSONObject c = array.getJSONObject(i);
txt = txt + '*' + c.getString("name");
}
textView_response.setText(txt);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
以上就是安卓與JSP之間,通過get請求發送數據,與解析來自JSP服務端返回的消息(字符串與JSON),希望對大家有所幫助。
學生一枚,剛接觸安卓開發不久,寫得不好或者有寫錯的,請諒解,歡迎指正交流。