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进行网络通信的方法(以用户登录为例说明)的更多相关文章

  1. Android中利用Handler实现消息的分发机制(三)

    在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而假设在子线程中须要去 ...

  2. Android中利用ant进行多渠道循环批量打包

    公司负责Android开发的小伙伴学习能力稍微偏弱,交代给他的自动化打包的任务,弄了好久依然没有成效.无奈只好亲自出手. 没有想到过程很顺利,我完全按照如下文章的步骤进行: 主要参考: Android ...

  3. Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

  4. 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

    原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...

  5. Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  6. Android 中对于图片的内存优化方法

    Android 中对于图片的内存优化方法,需要的朋友可以参考一下     1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFact ...

  7. Android中关于JNI 的学习(零)简单的样例,简单地入门

    Android中JNI的作用,就是让Java可以去调用由C/C++实现的代码,为了实现这个功能.须要用到Anrdoid提供的NDK工具包,在这里不讲怎样配置了,好麻烦,配置了好久. . . 本质上,J ...

  8. Android中利用C++处理Bitmap对象

    相信有些Android&图像算法开发者和我一样,遇到过这样的状况:要对Bitmap对象做一些密集计算(例如逐像素的滤波),但是在java层写循环代码来逐像素操作明显是不现实的,因为Java代码 ...

  9. 网络相关系列之中的一个:Android中使用HttpClient发送HTTP请求

    一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是 ...

随机推荐

  1. CFBundleName系列参数的含义

    顺带讲一下其他这些选项表示什么意思: CFBundleName: CFBundleName指定了该束的简称.简称应该小于16个字符并且适合在菜单和“关于”中显示.通过把它加入到适当的.lproj子文件 ...

  2. Centos系统mysql 忘记root用户的密码:

    第一步:(停掉正在运行的mysql) [root@maomao ~]# service mysqld stop  Stopping MySQL:                             ...

  3. Jsoup代码解读之四-parser

    Jsoup代码解读之四-parser 作为Java世界最好的HTML 解析库,Jsoup的parser实现非常具有代表性.这部分也是Jsoup最复杂的部分,需要一些数据结构.状态机乃至编译器的知识.好 ...

  4. .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束

    /// <summary> /// 计算某年第一周的天数         /// </summary>         /// <param name="dt& ...

  5. Sencha Touch 2 结合HTML5的本地存储创建数据库实现增、删、改、查

    大家好!我是范范.本人刚接触ST2到现在刚刚两个月,6月1号接的项目,那时才知道有Sencha Touch2这个东西,到现在两个月了期间的幸酸就不说了.今天说说在项目中用到的HTML5的本地存储.可能 ...

  6. 我的MYSQL学习心得 mysql日志

    这一篇<我的MYSQL学习心得(十五)>将会讲解MYSQL的日志 MYSQL里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情. 分别是 1.错误日志:记录mysql ...

  7. jquery 插件 validate 学习

    jquery是十分方便的对于现在来说. 首先应该明白一个问题: <p> <label  for="password">Password</label& ...

  8. 今天碰到的angular 中的一个小坑

    最近在自个儿研究angular,在写一个demo的时候总是有问题,最后发现居然是大小写的问题,卧槽 特tm的坑爹了,代码如下: <!DOCTYPE html> <html lang= ...

  9. JS提取URL中的参数

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  10. JQuery DataTable插件

    参考文件: http://blog.csdn.net/xuechongyang/article/details/8424897 http://blog.csdn.net/llhwin2010/arti ...