该篇文章主要说明使用Apache提供的HTTPClient,通过post方式,向服务器发送数据.由于有些东西在 Android - 向服务器发送数据(GET) 中提到过,就不再重复.

一,Android客户端的业务逻辑层:

package spt.http.post;import java.io.IOException;import java.net.MalformedURLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.http.HttpResponse;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import android.os.Handler;import android.util.Log;/** * 用户向服务器端发送数据的类(使用post)方法. *  * @author Administrator *  */public class PostSender {// 连接服务器的url.private static final String URL = "http://192.168.1.101:8080/ReceiveAndroid/ServletForPostMethod";// 标识是否连接到服务器成功.public static final int SEND_SUCCESS = 1;public static final int SEND_FAIL = 0;private Handler handler = null;//新线程关联的Handler,用于将是否发送成功的标识Message放到消息队列中.public PostSender(Handler handler) {this.handler = handler;}/** * 往服务器发送数据. *  * @param name * @param pwd */public void send(String name, String pwd) {// 这里params要传递到另外一个方法,加final为了防止被修改.final Map<String, String> params = new HashMap<String, String>();params.put("name", name);params.put("pwd", pwd);// 启动新的线程连接服务器.new Thread(new Runnable() {@Overridepublic void run() {// 请求连接.try {if (postSend(params, URL, "utf-8"))handler.sendEmptyMessage(SEND_SUCCESS);elsehandler.sendEmptyMessage(SEND_FAIL);} catch (MalformedURLException e) {Log.d("sysout", "run:MalformedURLException" + e.getMessage());} catch (IOException e) {Log.d("sysout", "run:IOException" + e.getMessage());}}}).start();}/** * 发送post请求的方法. *  * @param params *            请求参数的键-值对. * @param url * @param encoding *            使用指定编码对参数值进行编码. * @return * @throws MalformedURLException * @throws IOException */private boolean postSend(Map<String, String> params, String url,String encoding) throws MalformedURLException, IOException {// 封装请求参数的键值对.List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();for (Entry<String, String> param : params.entrySet()) {pairs.add(new BasicNameValuePair(param.getKey(), param.getValue()));}//封装请求参数的实体.UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, encoding);//使用post请求.HttpPost post = new HttpPost(url);post.setEntity(entity);//使用DefaultHttpClient指定请求,以获取响应信息.DefaultHttpClient client = new DefaultHttpClient();HttpResponse response = client.execute(post);return response.getStatusLine().getStatusCode() == 200; // 等于200表示发送成功.}}

二,服务器端的Servlet,重写doPost方法:

package spt.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/ServletForPostMethod")public class ServletForPostMethod extends HttpServlet{/** *  */private static final long serialVersionUID = 1L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("enter...post");String name = req.getParameter("name");String pwd = req.getParameter("pwd");System.out.println("name=" + name);System.out.println("pwd=" + pwd);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//System.out.println("enter...get");//String name = req.getParameter("name");//String pwd = req.getParameter("pwd");//System.out.println("name=" + name);//System.out.println("pwd=" + pwd);}}

另外,途中,我连几个小时的Tomcat服务器,后来通过log过滤,发现自己的问题,所以建议多使用log捕获异常信息.我在网上看到有位网友,使用HTTP进行post连接的时候,对url的处理和get一样,都是将参数拼接在原有url的后面,我觉得很奇怪.

更多相关文章

  1. Android pm命令使用方法
  2. unity在android显示界面(UnityPlayerActivity)不重复加载且app退出
  3. 三种方法使android 手机执行 二进制程序
  4. ListView自动滚动方法
  5. android投屏和媒体共享相关 && audio focus机制相关 && AudioTra
  6. Android中的Logcat方法查看内核的日志
  7. Android从远程服务器下载文件到本地sd卡中
  8. 关于Android方法数量限制的问题
  9. Android第三方登录-----微信登录接入方法

随机推荐

  1. Java面试题全集(5)
  2. 你可能错过的现代 JavaScript 特性 [每日
  3. 怎样创建你的第一个React Native App[每
  4. Vue3 对 Web 应用性能的改进[每日前端夜
  5. Linux性能优化(四)——BCC性能监控工具
  6. Vue 3 中令人兴奋的新功能[每日前端夜话0
  7. 用 MelonJS 开发一个游戏[每日前端夜话0x
  8. Java面试题全集(8)
  9. Linux性能优化(三)——sysstat性能监控工具
  10. 我们应该为 JavaScript 重新命名吗?[每日