Android客户端向SSH服务器发送数据主要有三种情况:通过客户端删除数据、添加数据和修改数据。
1.删除数据
先看看jsp文件里面是怎样删除数据的:
<td align="center"><a href="clasdelete.action?id=<s:property value='#st.id'/>" οnclick="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()); } }