標籤:
Android用戶端向SSH伺服器發送資料主要有三種情況:通過用戶端刪除資料、添加資料和修改資料。
1.刪除資料
先看看jsp檔案裡面是怎樣刪除資料的:
<td align="center"><a href="clasdelete.action?id=<s:property value=‘#st.id‘/>" onclick="if(!window.confirm(‘是否刪除‘))return false;" >刪除</a>
也就是說,只要向伺服器發出一個HTTP請求,包含clasdelete.action?id=(要刪除的記錄id),就可以實現記錄的刪除。因此,首先通過點擊按鈕事件獲得要刪除的記錄的ID,然後再啟動一個線程向伺服器發出HTTP請求即可。
// 點擊刪除按鈕 my_item.btnDel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Var.id = my_item.txtNum.getText().toString(); Var.type = 2; Var.delThread = new CommThread(); Var.delThread.start(); } });
刪除資料的功能和向伺服器請求資料的功能可以在一個線程類裡面實現,因為它們除了請求的URL不同,其他的操作基本上都是一樣的。
// 刪除資料 else if (Var.type == 2){ Var.strAct ="clasdelete.action?id=" + Var.id; Var.strURL = Var.strHost + Var.strAct; resIS = getIS(Var.strURL); }
2.添加資料
先看看在jsp檔案裡面是如何?添加資料的:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>添加課程</title> </head> <body> <center> <s:form action="clas" method="post" > <tr> <td colspan="2" align="center"> <h1><s:text name="歡迎添加課程"/></h1><br/> <s:property value="exception.message"/> </td> </tr> <s:textfield name="clas.name" key="課程名稱" tooltip="Enter class name!" required="true"></s:textfield> <s:textfield name="clas.comment" key="課程介紹" tooltip="Enter the comment!" required="true"></s:textfield> <s:submit value="提交"/> <s:set/> </s:form> </center> </body></html>
也就是說,只要向伺服器提交clas.name、clas.comment兩個變數的值就可以了。在Android用戶端,只能通過NameValuePair[]數組向伺服器提交變數的值。建立一個線程類,把變數的名稱和值放進NameValuePair[]數組,再向伺服器提交就可以了。
public void add(){ Var.strAct = "clas"; Var.strURL = Var.strHost + Var.strAct; Log.i("PostThread:", Var.strURL); // 建立HTTPPost串連 HttpPost httpRequest = new HttpPost(Var.strURL); // 變數用NameValuePair[]數組儲存 List <NameValuePair> params = new ArrayList <NameValuePair>(); params.add(new BasicNameValuePair("clas.name", AddActivity.txtName)); params.add(new BasicNameValuePair("clas.comment", AddActivity.txtComm)); try{ // 發出HTTPRequest httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // 取得HTTPResponse HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); // 狀態代碼為200表明成功 if(httpResponse.getStatusLine().getStatusCode() == 200) { sendMessage(Var.msg_add, ""); } else{ sendMessage(Var.msg_error,httpResponse.getStatusLine().toString()); } } // 出錯處理 catch (ClientProtocolException e){ e.printStackTrace(); sendMessage(Var.msg_error, e.toString()); } catch (IOException e){ e.printStackTrace(); sendMessage(Var.msg_error,e.toString()); } catch (Exception e){ e.printStackTrace(); sendMessage(Var.msg_error,e.toString()); } }
3.修改資料
修改資料和刪除資料類似,也是把變數名稱和值放進NameValuePair[]數組,再向伺服器提交就可以了。
// 修改資料 public void update(){ Var.strAct = "clasupdate"; Var.strURL = Var.strHost + Var.strAct; Log.i("PostThread:", Var.strURL); // 建立HTTPPost串連 HttpPost httpRequest = new HttpPost(Var.strURL); // Post變數用NameValuePair[]數組儲存 List <NameValuePair> params = new ArrayList <NameValuePair>(); params.add(new BasicNameValuePair("clas.id", UpdateActivity.txtID)); params.add(new BasicNameValuePair("clas.name", UpdateActivity.txtName)); params.add(new BasicNameValuePair("clas.comment", UpdateActivity.txtComm)); try{ // 發出HTTPRequest httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // 取得HTTPResponse HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); // 狀態代碼為200表明成功 if(httpResponse.getStatusLine().getStatusCode() == 200) { sendMessage(Var.msg_update, ""); } else{ sendMessage(Var.msg_error,httpResponse.getStatusLine().toString()); } } // 出錯處理 catch (ClientProtocolException e){ e.printStackTrace(); sendMessage(Var.msg_error, e.toString()); } catch (IOException e){ e.printStackTrace(); sendMessage(Var.msg_error,e.toString()); } catch (Exception e){ e.printStackTrace(); sendMessage(Var.msg_error,e.toString()); } }
SSH伺服器與Android通訊(3)--Android用戶端發送資料