灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2596回复:0

Android中利用httpclient进行网络通信的方法(以用户登录为例说明)

楼主#
更多 发布于:2012-09-06 13:48


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。否则肯定会导致访问不成功!


喜欢0 评分0
游客

返回顶部