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)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是 ...
随机推荐
- SendMessage发送WM_COMMAND消息控制另一个程序的某一个按钮
procedure TfrmMain.btnSendClick(Sender: TObject); var hCalc, h1: Cardinal; begin WinExec('calc', SW_ ...
- kafka初探
http://www.infoq.com/cn/articles/kafka-analysis-part-1
- CCNA实验(5) -- OSPF
enableconf tno ip do loenable pass ciscoline con 0logg syncexec-t 0 0line vty 0 4pass ciscologg sync ...
- no protocol specified
基于vncserver安装oracle or oracle RAC时 以root账号运行xhost + 在切换到grid or oracle安装oracle database file or clus ...
- c++11新特性(4) lambda捕捉块
lambda表达式中的方括号成为捕捉块,能够在这里指定怎样从所在的作用域中捕捉变量. 捕捉的意思是指能够在该lambda中使用该变量.即能够捕获外部变量在lambda表达式内使用. 能够使用两种方式来 ...
- CF# 260 A. Laptops
One day Dima and Alex had an argument about the price and quality of laptops. Dima thinks that the m ...
- c 转置字符串You are a so cheap man ->man cheap so a are You
解题思路: 1.将字符串转置 2.对转置后的字符串中单词转置 #include<stdio.h> #include<string.h> #include<stdlib.h ...
- POJ 2115 模线性方程 ax=b(mod n)
/* (x*c+a)%(2^k)==b →(x*c)%(2^k)==b-a 满足定理: 推论1:方程ax=b(mod n)对于未知量x有解,当且仅当gcd(a,n) | b. 推论2:方程ax=b(m ...
- Ubuntu Git安装
Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.通过使用git工具,我们可以实现团队间合作开发统一管理,可以从远程仓库中提取代码,也可以把代码上传到远程仓库,从而实现 ...
- BZOJ 1485: [HNOI2009]有趣的数列( catalan数 )
打个表找一下规律可以发现...就是卡特兰数...卡特兰数可以用组合数计算.对于这道题,ans(n) = C(n, 2n) / (n+1) , 分解质因数去算就可以了... -------------- ...