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. mirantis cert

    with no vendor specificity and/or proprietary implementations,没有供应商的特异性和/或专有的实现 https://training.mir ...

  2. geometry(简单数学题)

    geometry  Accepts: 324  Submissions: 622  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6553 ...

  3. iOS开发-Protocol协议及委托代理(Delegate)传值

    前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...

  4. C#中linq报“Character literal must contain exactly one character”的错误提示

    后台代码使用linq提示"Character literal must contain exactly one character": 网上看了一下提示在部分linq语句中直接写入 ...

  5. 五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写

    调度器: 定时任务是通过调度器实现的.cocos2d-x推荐用调度器而不是其他方法实现定时任务.Node类都知道如何调度和取消调度事件. 有3种调度器: 默认调度器:schedulerUpdate() ...

  6. GDI+ 对象释放崩溃的问题

    确保在Gdiplus::GdiplusShutdown(m_gdiplusToken); 之前delete 掉GDI+的对象,例如:delete *pBitmap; 如果先Gdiplus::Gdipl ...

  7. hrtimer 高精定时器使用例子

    在kernel,有个线程每个十秒往上层系统上报battery及USB的状态信息. 加入直接sleep 10 秒的话,插入USB的时候不能及时更新状态,这个时候就可以使用 hrtimer + wait ...

  8. 织梦dedecms|文章页通用标签

    当前位置: {dede:field name='position'/}上一页: {dede:prenext get='pre'/}下一页:    {dede:prenext get='next'/}收 ...

  9. 如何避免JSP乱码

    如何解决JavaWeb乱码问题   作为一个合格的web开发人员应该是什么问题都遇到过的,尤其是乱码问题.大家也许都体会到了,我们中国人学编程,很大的一个不便就是程序的编码问题,无论学习什么技术,我们 ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...