Android中利用httpclient进行网络通信的方法(以用户登录为例说明)
http://www.android100.org/html/201406/09/22915.html
1.服务器端
服务器端和android没有太大关系,对J2EE比较熟悉的话写起来应该很容易,这里就不一一贴出代码。
首先在本地创建一个数据库表,其中包含了一个userinfo表用来存储用户信息。
需要实现的代码如下:
DBUtils:创建数据库连接对象
User实体类:用来存放用户信息
UserDao:用来对处理User相关的数据操作
UserService:调用UserDao来处理事务
UserServlet:处理用户请求,并返回
当客户端访问该servlet时,获得客户端传入的数据,处理数据,并将结果写到response中返回给客户端。
UserServlet中doPost方法如下:
[java] <span style="font-size:16px;">1 public void doPost(HttpServletRequest request, HttpServletResponse response)
2 throws ServletException, IOException {
3 UserService us = UserService.getInstance();
4 String username = request.getParameter("username"); //获得从客户端传入的用户名和密码
5 String password = request.getParameter("password");
6 //System.out.println("username:"+username);
7 //System.out.println("password:"+password);
8 //response.setContentType("text/html");
9 PrintWriter out = response.getWriter();
10 if(us.login(username, password))
11 {
12 //用户登录成功!
13 out.println("success");
14 }
15 else //用户登录失败
16 out.println("failed");
17 out.flush();
18 out.close();
19 } </span>
<span style="font-size:16px;">1 public void doPost(HttpServletRequest request, HttpServletResponse response)
2 throws ServletException, IOException {
3 UserService us = UserService.getInstance();
4 String username = request.getParameter("username"); //获得从客户端传入的用户名和密码
5 String password = request.getParameter("password");
6 //System.out.println("username:"+username);
7 //System.out.println("password:"+password);
8 //response.setContentType("text/html");
9 PrintWriter out = response.getWriter();
10 if(us.login(username, password))
11 {
12 //用户登录成功!
13 out.println("success");
14 }
15 else //用户登录失败
16 out.println("failed");
17 out.flush();
18 out.close();
19 } </span>
2.客户端,首先创建一个登录Activity。如图所示:

当用户点击登录按钮后,创建一个http请求,发送到服务器端。获得服务器返回的结果后,再进行判断并执行相关操作。
httpclient相当于一个浏览器,通过它,可以很方便的发出GET,POST请求。
该Activity的具体代码如下:
[java] <span style="font-size:16px;">20 public class GossipActivity extends Activity {
21 /** Called when the activity is first created. */
22
23 pivate EditText usernameEdit;
24 private EditText passwordEdit;
25 private Button loginButton;
26
27 @Override
28 public void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.main);
31
32 usernameEdit = (EditText)findViewById(R.id.usernameEdit);
33 passwordEdit = (EditText)findViewById(R.id.pwdEdit);
34 loginButton = (Button)findViewById(R.id.loginButton);
35
36 loginButton.setOnClickListener(loginListener);
37 }
38
39 //登陆监听器
40 OnClickListener loginListener = new OnClickListener(){
41
42 @Override
43 public void onClick(View v) {
44 System.out.println("Login Button clicked!");
45 String httpUrl = "http://10.0.2.2:8089/Gossip/LoginServlet";
46 System.out.println(httpUrl);
47 HttpPost request = new HttpPost(httpUrl);
48 HttpClient httpClient = new DefaultHttpClient();
49 //传递参数
50 List<NameValuePair> params = new ArrayList<NameValuePair>();
51 params.add(new BasicNameValuePair("username",usernameEdit.getText().toString()));
52 params.add(new BasicNameValuePair("password",passwordEdit.getText().toString()));
53 HttpResponse response;
54 try {
55 HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
56 request.setEntity(entity);
57 response = httpClient.execute(request);
58
59 //如果返回状态为200,获得返回的结果
60 if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
61 String str = EntityUtils.toString(response.getEntity());
62 System.out.println("response:"+str);
63 if(str.trim().equals("success")){
64 //用户登录成功
65 System.out.println("登录成功!");
66 Intent intent = new Intent(GossipActivity.this,GossiplistActivity.class);
67 startActivity(intent);
68 }
69 else{
70 //用户登录失败
71 System.out.println("登录失败!");
72 }
73 }else{
74 System.out.println("连接失败!");
75 }
76 } catch (ClientProtocolException e) {
77 // TODO Auto-generated catch block
78 e.printStackTrace();
79 } catch (IOException e) {
80 // TODO Auto-generated catch block
81 e.printStackTrace();
82 }
83
84 }};
85 } </span>
<span style="font-size:16px;">20 public class GossipActivity extends Activity {
21 /** Called when the activity is first created. */
22
23 private EditText usernameEdit;
24 private EditText passwordEdit;
25 private Button loginButton;
26
27 @Override
28 public void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.main);
31
32 usernameEdit = (EditText)findViewById(R.id.usernameEdit);
33 passwordEdit = (EditText)findViewById(R.id.pwdEdit);
34 loginButton = (Button)findViewById(R.id.loginButton);
35
36 loginButton.setOnClickListener(loginListener);
37 }
38
39 //登陆监听器
40 OnClickListener loginListener = new OnClickListener(){
41
42 @Override
43 public void onClick(View v) {
44 System.out.println("Login Button clicked!");
45 String httpUrl = "http://10.0.2.2:8089/Gossip/LoginServlet";
46 System.out.println(httpUrl);
47 HttpPost request = new HttpPost(httpUrl);
48 HttpClient httpClient = new DefaultHttpClient();
49 //传递参数
50 List<NameValuePair> params = new ArrayList<NameValuePair>();
51 params.add(new BasicNameValuePair("username",usernameEdit.getText().toString()));
52 params.add(new BasicNameValuePair("password",passwordEdit.getText().toString()));
53 HttpResponse response;
54 try {
55 HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
56 request.setEntity(entity);
57 response = httpClient.execute(request);
58
59 //如果返回状态为200,获得返回的结果
60 if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
61 String str = EntityUtils.toString(response.getEntity());
62 System.out.println("response:"+str);
63 if(str.trim().equals("success")){
64 //用户登录成功
65 System.out.println("登录成功!");
66 Intent intent = new Intent(GossipActivity.this,GossiplistActivity.class);
67 startActivity(intent);
68 }
69 else{
70 //用户登录失败
71 System.out.println("登录失败!");
72 }
73 }else{
74 System.out.println("连接失败!");
75 }
76 } catch (ClientProtocolException e) {
77 // TODO Auto-generated catch block
78 e.printStackTrace();
79 } catch (IOException e) {
80 // TODO Auto-generated catch block
81 e.printStackTrace();
82 }
83
84 }};
85 } </span>
在数据库中添加一行:用户名为123,密码为456。登录后调转到另一Activity并在控制台中打印调试信息,结果如下:

3 在向本机发送HTTP请求时,有一点必须注意,就是在android 虚拟机中,127.0.0.1为android 虚拟机的IP地址,
如果要访问本机,IP地址应该改为10.0.2.2。否则肯定会导致访问不成功!
作者:余蒙
Android中利用httpclient进行网络通信的方法(以用户登录为例说明)的更多相关文章
- Android中利用Handler实现消息的分发机制(三)
在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而假设在子线程中须要去 ...
- Android中利用ant进行多渠道循环批量打包
公司负责Android开发的小伙伴学习能力稍微偏弱,交代给他的自动化打包的任务,弄了好久依然没有成效.无奈只好亲自出手. 没有想到过程很顺利,我完全按照如下文章的步骤进行: 主要参考: Android ...
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- Android 中对于图片的内存优化方法
Android 中对于图片的内存优化方法,需要的朋友可以参考一下 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFact ...
- Android中关于JNI 的学习(零)简单的样例,简单地入门
Android中JNI的作用,就是让Java可以去调用由C/C++实现的代码,为了实现这个功能.须要用到Anrdoid提供的NDK工具包,在这里不讲怎样配置了,好麻烦,配置了好久. . . 本质上,J ...
- Android中利用C++处理Bitmap对象
相信有些Android&图像算法开发者和我一样,遇到过这样的状况:要对Bitmap对象做一些密集计算(例如逐像素的滤波),但是在java层写循环代码来逐像素操作明显是不现实的,因为Java代码 ...
- 网络相关系列之中的一个:Android中使用HttpClient发送HTTP请求
一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是 ...
随机推荐
- CFBundleName系列参数的含义
顺带讲一下其他这些选项表示什么意思: CFBundleName: CFBundleName指定了该束的简称.简称应该小于16个字符并且适合在菜单和“关于”中显示.通过把它加入到适当的.lproj子文件 ...
- Centos系统mysql 忘记root用户的密码:
第一步:(停掉正在运行的mysql) [root@maomao ~]# service mysqld stop Stopping MySQL: ...
- Jsoup代码解读之四-parser
Jsoup代码解读之四-parser 作为Java世界最好的HTML 解析库,Jsoup的parser实现非常具有代表性.这部分也是Jsoup最复杂的部分,需要一些数据结构.状态机乃至编译器的知识.好 ...
- .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束
/// <summary> /// 计算某年第一周的天数 /// </summary> /// <param name="dt& ...
- Sencha Touch 2 结合HTML5的本地存储创建数据库实现增、删、改、查
大家好!我是范范.本人刚接触ST2到现在刚刚两个月,6月1号接的项目,那时才知道有Sencha Touch2这个东西,到现在两个月了期间的幸酸就不说了.今天说说在项目中用到的HTML5的本地存储.可能 ...
- 我的MYSQL学习心得 mysql日志
这一篇<我的MYSQL学习心得(十五)>将会讲解MYSQL的日志 MYSQL里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情. 分别是 1.错误日志:记录mysql ...
- jquery 插件 validate 学习
jquery是十分方便的对于现在来说. 首先应该明白一个问题: <p> <label for="password">Password</label& ...
- 今天碰到的angular 中的一个小坑
最近在自个儿研究angular,在写一个demo的时候总是有问题,最后发现居然是大小写的问题,卧槽 特tm的坑爹了,代码如下: <!DOCTYPE html> <html lang= ...
- JS提取URL中的参数
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- JQuery DataTable插件
参考文件: http://blog.csdn.net/xuechongyang/article/details/8424897 http://blog.csdn.net/llhwin2010/arti ...