• 09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例


       根据08_android入门_android-async-http开源项目介绍及使用方法的介绍,我们通过最常见的登陆案例进行介绍android-async-http开源项目中有关类的使用.希望对你学习android-async-http开源项目有所帮助.

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

    2.服务器端的代码采用04_android入门_采用HttpURLConnection的GET方式实现登陆案例中的服务器代码片段(5.关于服务器中我仅写一个Servlet进行处理相应的请求处理)

    3.在应用中引用android-async-http开源项目

    方法一:找到下载文件的源码librarysrcmainjava的com包黏贴到项目中的src目录下

    方法二:把android-async-http-master eleases下面最新的jar包放到应用到libs下

    4.LoginActivity的代码(代码中详细加了注释,请仔细阅读)

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. package com.example.lesson03;  
    2.   
    3. import org.apache.http.Header;  
    4.   
    5. import com.loopj.android.http.AsyncHttpClient;  
    6. import com.loopj.android.http.AsyncHttpResponseHandler;  
    7. import com.loopj.android.http.RequestParams;  
    8.   
    9. import android.app.Activity;  
    10. import android.os.Bundle;  
    11. import android.text.TextUtils;  
    12. import android.view.View;  
    13. import android.widget.EditText;  
    14. import android.widget.TextView;  
    15. import android.widget.Toast;  
    16.   
    17. public class LoginActivity extends Activity {  
    18.   
    19.     // 声明控件  
    20.     private EditText et_name, et_pass;  
    21.     private TextView tv_result;  
    22.   
    23.     @Override  
    24.     protected void onCreate(Bundle savedInstanceState) {  
    25.         super.onCreate(savedInstanceState);  
    26.         setContentView(R.layout.activity_main);  
    27.   
    28.         // 获取控件对象  
    29.         et_name = (EditText) findViewById(R.id.et_name);  
    30.         et_pass = (EditText) findViewById(R.id.et_pass);  
    31.         tv_result = (TextView) findViewById(R.id.tv_result);  
    32.     }  
    33.   
    34.     /** 
    35.      * 点击按钮控件触发的事件 
    36.      * @param v 
    37.      */  
    38.     public void login(View v) {  
    39.         //获取控件的id  
    40.         int id = v.getId();  
    41.         //根据id判断进行相应的处理  
    42.         switch (id) {  
    43.         case R.id.btn_login:  
    44.             // 获取控件的文本内容  
    45.             String userName = et_name.getText().toString();// 用户名  
    46.             String userPass = et_pass.getText().toString();// 用户密码  
    47.             //判断用户名和密码是否为空  
    48.             if (TextUtils.isEmpty(userName.trim())  
    49.                     || TextUtils.isEmpty(userPass.trim())) {  
    50.                 Toast.makeText(this, "用户名或者密码不能为空", Toast.LENGTH_LONG).show();  
    51.             } else {  
    52.                 // 发送请求给服务器  
    53.                 //调用:loginByAsyncHttpClientPost(userName, userPass);  
    54.                 loginByAsyncHttpClientGet(userName, userPass);  
    55.             }  
    56.             break;  
    57.         }  
    58.     }  
    59.   
    60.     /** 
    61.      * 采用AsyncHttpClient的Post方式进行实现 
    62.      * @param userName 
    63.      * @param userPass 
    64.      */  
    65.     public void loginByAsyncHttpClientPost(String userName, String userPass) {  
    66.         AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象  
    67.         String url = "http://172.16.237.200:8080/video/login.do"; // 定义请求的地址  
    68.         // 创建请求参数的封装的对象  
    69.         RequestParams params = new RequestParams();  
    70.         params.put("username", userName); // 设置请求的参数名和参数值  
    71.         params.put("userpass", userPass);// 设置请求的参数名和参数  
    72.         // 执行post方法  
    73.         client.post(url, params, new AsyncHttpResponseHandler() {  
    74.             /** 
    75.              * 成功处理的方法 
    76.              * statusCode:响应的状态码; headers:相应的头信息 比如 响应的时间,响应的服务器 ; 
    77.              * responseBody:响应内容的字节 
    78.              */  
    79.             @Override  
    80.             public void onSuccess(int statusCode, Header[] headers,  
    81.                     byte[] responseBody) {  
    82.                 if (statusCode == 200) {  
    83.                     tv_result.setText(new String(responseBody)); // 设置显示的文本  
    84.                 }  
    85.             }  
    86.   
    87.             /** 
    88.              * 失败处理的方法 
    89.              * error:响应失败的错误信息封装到这个异常对象中 
    90.              */  
    91.             @Override  
    92.             public void onFailure(int statusCode, Header[] headers,  
    93.                     byte[] responseBody, Throwable error) {  
    94.                 error.printStackTrace();// 把错误信息打印出轨迹来  
    95.             }  
    96.         });  
    97.     }  
    98.   
    99.     /** 
    100.      * 采用AsyncHttpClient的Get方式进行实现 
    101.      * @param userName 
    102.      * @param userPass 
    103.      */  
    104.     public void loginByAsyncHttpClientGet(String userName, String userPass) {  
    105.         // 创建异步的客户端对象  
    106.         AsyncHttpClient client = new AsyncHttpClient();  
    107.         // 请求的地址  
    108.         String url = "http://172.16.237.200:8080/video/login.do";  
    109.         // 创建请求参数的封装的对象  
    110.         RequestParams params = new RequestParams();  
    111.         params.put("username", userName); // 设置请求的参数名和参数值  
    112.         params.put("userpass", userPass);// 设置请求的参数名和参数  
    113.           
    114.         // 发送get请求的时候 url地址 相应参数,匿名回调对象  
    115.         client.get(url, params,new AsyncHttpResponseHandler() {  
    116.             @Override  
    117.             public void onSuccess(int statusCode, Header[] headers,  
    118.                     byte[] responseBody) {  
    119.                 // 成功处理的方法  
    120.                 System.out  
    121.                         .println("statusCode-------------------" + statusCode);  
    122.                 // 遍历头信息  
    123.                 for (int i = 0; i < headers.length; i++) {  
    124.                     Header header = headers[i];  
    125.                     System.out.println("header------------Name:"  
    126.                             + header.getName() + ",--Value:"  
    127.                             + header.getValue());  
    128.                 }  
    129.                 // 设置控件内容  
    130.                 tv_result.setText(new String(responseBody));  
    131.             }  
    132.   
    133.             @Override  
    134.             public void onFailure(int statusCode, Header[] headers,  
    135.                     byte[] responseBody, Throwable error) {  
    136.                 // 失败处理的方法  
    137.                 error.printStackTrace();  
    138.             }  
    139.         });  
    140.     }  
    141.   
    142. }  

    5.程序运行结果如下图:

     

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

     
  • 相关阅读:
    v-cloak 的用法
    vuejs开发流程
    java核心技术卷一
    删除数组重复项
    看懂oracle执行计划
    sheet制作返回按钮
    sql-server安装
    openpyxl 实现excel字母列号与数字列号之间的转换
    实战:第七章:微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面...
    微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4595948.html
Copyright © 2020-2023  润新知