06_android入门_采用HttpURLConnection的POST方式实现登陆案例

http://blog.csdn.net/redarmy_chen/article/details/26860769

1.继续采用03_android入门_采用RelativeLayout实现登陆界面为该案例的布局文件 

2.服务器端的代码采用04_android入门_采用HttpURLConnection的GET方式实现登陆案例中的服务器代码片段

3.具体的Activity的实现代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package www.csdn.net.lesson03;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.InputStream;  
  5. import java.io.OutputStream;  
  6. import java.net.HttpURLConnection;  
  7. import java.net.URL;  
  8. import java.net.URLEncoder;  
  9.   
  10. import android.app.Activity;  
  11. import android.os.Bundle;  
  12. import android.text.TextUtils;  
  13. import android.view.View;  
  14. import android.widget.EditText;  
  15. import android.widget.TextView;  
  16. import android.widget.Toast;  
  17.   
  18. public class LoginActivity extends Activity {  
  19.     // 声明控件对象  
  20.     private EditText et_name, et_pass;  
  21.     // 声明显示返回数据库的控件对象  
  22.     private TextView tv_result;  
  23.     @Override  
  24.     protected void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         // 设置显示的视图  
  27.         setContentView(R.layout.activity_login);  
  28.         // 通过 findViewById(id)方法获取用户名的控件对象  
  29.         et_name = (EditText) findViewById(R.id.et_name);  
  30.         // 通过 findViewById(id)方法获取用户密码的控件对象  
  31.         et_pass = (EditText) findViewById(R.id.et_pass);  
  32.   
  33.         // 通过 findViewById(id)方法获取显示返回数据的控件对象  
  34.         tv_result = (TextView) findViewById(R.id.tv_result);  
  35.   
  36.     }  
  37.   
  38.     /** 
  39.      * 通过android:onClick="login"指定的方法 , 要求这个方法中接受你点击控件对象的参数v 
  40.      *  
  41.      * @param v 
  42.      */  
  43.     public void login(View v) {  
  44.         // 获取点击控件的id  
  45.         int id = v.getId();  
  46.         // 根据id进行判断进行怎么样的处理  
  47.         switch (id) {  
  48.         // 登陆事件的处理  
  49.         case R.id.btn_login:  
  50.             // 获取用户名  
  51.             final String userName = et_name.getText().toString();  
  52.             // 获取用户密码  
  53.             final String userPass = et_pass.getText().toString();  
  54.             if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(userPass)) {  
  55.                 Toast.makeText(this"用户名或者密码不能为空", Toast.LENGTH_LONG).show();  
  56.             } else {  
  57.                 // 开启子线程  
  58.                 new Thread() {  
  59.                     public void run() {  
  60.                         loginByPost(userName, userPass); // 调用loginByPost方法  
  61.                     };  
  62.                 }.start();  
  63.             }  
  64.             break;  
  65.         }  
  66.   
  67.     }  
  68.   
  69.     /** 
  70.      * POST请求操作 
  71.      *  
  72.      * @param userName 
  73.      * @param userPass 
  74.      */  
  75.     public void loginByPost(String userName, String userPass) {  
  76.   
  77.         try {  
  78.   
  79.             // 请求的地址  
  80.             String spec = "http://172.16.237.200:8080/video/login.do";  
  81.             // 根据地址创建URL对象  
  82.             URL url = new URL(spec);  
  83.             // 根据URL对象打开链接  
  84.             HttpURLConnection urlConnection = (HttpURLConnection) url  
  85.                     .openConnection();  
  86.             // 设置请求的方式  
  87.             urlConnection.setRequestMethod("POST");  
  88.             // 设置请求的超时时间  
  89.             urlConnection.setReadTimeout(5000);  
  90.             urlConnection.setConnectTimeout(5000);  
  91.             // 传递的数据  
  92.             String data = "username=" + URLEncoder.encode(userName, "UTF-8")  
  93.                     + "&userpass=" + URLEncoder.encode(userPass, "UTF-8");  
  94.             // 设置请求的头  
  95.             urlConnection.setRequestProperty("Connection""keep-alive");  
  96.             // 设置请求的头  
  97.             urlConnection.setRequestProperty("Content-Type",  
  98.                     "application/x-www-form-urlencoded");  
  99.             // 设置请求的头  
  100.             urlConnection.setRequestProperty("Content-Length",  
  101.                     String.valueOf(data.getBytes().length));  
  102.             // 设置请求的头  
  103.             urlConnection  
  104.                     .setRequestProperty("User-Agent",  
  105.                             "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0");  
  106.   
  107.             urlConnection.setDoOutput(true); // 发送POST请求必须设置允许输出  
  108.             urlConnection.setDoInput(true); // 发送POST请求必须设置允许输入  
  109.                                             //setDoInput的默认值就是true  
  110.             //获取输出流  
  111.             OutputStream os = urlConnection.getOutputStream();  
  112.             os.write(data.getBytes());  
  113.             os.flush();  
  114.             if (urlConnection.getResponseCode() == 200) {  
  115.                 // 获取响应的输入流对象  
  116.                 InputStream is = urlConnection.getInputStream();  
  117.                 // 创建字节输出流对象  
  118.                 ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  119.                 // 定义读取的长度  
  120.                 int len = 0;  
  121.                 // 定义缓冲区  
  122.                 byte buffer[] = new byte[1024];  
  123.                 // 按照缓冲区的大小,循环读取  
  124.                 while ((len = is.read(buffer)) != -1) {  
  125.                     // 根据读取的长度写入到os对象中  
  126.                     baos.write(buffer, 0, len);  
  127.                 }  
  128.                 // 释放资源  
  129.                 is.close();  
  130.                 baos.close();  
  131.                 // 返回字符串  
  132.                 final String result = new String(baos.toByteArray());  
  133.   
  134.                 // 通过runOnUiThread方法进行修改主线程的控件内容  
  135.                 LoginActivity.this.runOnUiThread(new Runnable() {  
  136.                     @Override  
  137.                     public void run() {  
  138.                         // 在这里把返回的数据写在控件上 会出现什么情况尼  
  139.                         tv_result.setText(result);  
  140.                     }  
  141.                 });  
  142.   
  143.             } else {  
  144.                 System.out.println("链接失败.........");  
  145.             }  
  146.         } catch (Exception e) {  
  147.             e.printStackTrace();  
  148.         }  
  149.     }  
  150.   
  151. }  

实现的效果图如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值