根据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开源项目

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

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

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

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

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

 

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

 

09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例的更多相关文章

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

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

  2. 搜刮一些开源项目的APP

    iOS完整App资源收集 <iOS完整app资源收集>  <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...

  3. 优秀开源项目的svn地址

    很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习,都是一大幸福之事啊! Apache的SVN库,强烈推荐! http://svn.apache.org/repos/asf/ 里面不但有S ...

  4. 新一代分布式任务调度框架:当当elastic-job开源项目的10项特性

    作者简介: 张亮,当当网架构师.当当技术委员会成员.消息中间件组负责人.对架构设计.分布式.优雅代码等领域兴趣浓厚.目前主导当当应用框架ddframe研发,并负责推广及撰写技术白皮书.   一.为什么 ...

  5. 跟我一起使用android Studio打包react-native项目的APK

    使用的是react-native的hello-world项目 第一步:创建项目 npm install -g yarn react-native-cli react-native init Aweso ...

  6. jeecg开源项目的IDEA的部署

    JEECG采用了SpringMVC + Hibernate + Minidao(类Mybatis) + Easyui(UI库)+ Jquery + Boostrap + Ehcache + Redis ...

  7. 在 GitHub 上玩转开源项目的 Code Review

    一.幕后故事 时光荏苒,岁月如梭-- (太文绉绉了,这不是我的风格) 今天我准备聊聊在 GitHub 上如何玩 Code Review. 突发奇想?心血来潮?不是. 咋回事呢?(对八卦不感兴趣的可以直 ...

  8. MVC学习笔记---WebViewPage(nop等开源项目的@T)

    http://www.cnblogs.com/gyche/p/5597491.html http://www.cnblogs.com/Alex80/p/5369042.html http://www. ...

  9. 如何选择开源项目的license

    https://choosealicense.com/ http://www.csdn.net/article/2013-07-16/2816249-Github-Open-Source-Licens ...

随机推荐

  1. UITableView详解(2)

    承接上文,再续本文 一,首先我们对上次的代码进行改进,需要知道的一点是,滚动视图的时候,我们要创建几个视图,如果一个视图显示一个图片占据整个屏幕,对于滚动视图我们只需要创建三个视图就可以显示几千给图片 ...

  2. 三色二叉树_树形DP

    Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description 一棵二叉树可以按照如下规则表示成一个由0.1.2组成的字符序 ...

  3. iOS-appDelegate 生命周期

    - (void)applicationWillResignActive:(UIApplication *)application 说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事 ...

  4. (实用篇)PHP不用递归遍历目录下所有文件的代码

    <?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ fu ...

  5. 如何为libs目录下的jar包关联源代码

    以前,我们可以为lib目录下的jar包关联源代码,但是现在似乎不行了. 下面是一篇讲述此问题解决方法的文章: How to attach javadoc or sources to jars in l ...

  6. CGI实现页面的动态生成

    传统的Web应用开发局限于有限的静态页面(HTML静态页面),不利于系统的扩展,不能提供及时信息,而且修改维护麻烦,所以建立一个动态Web应用程序尤为重要.一方面根据访问者的不同请求返回不同的访问信息 ...

  7. UVa 10810 - Ultra-QuickSort

    题目大意:给出一个数列,每次交换相邻数字,求排成递增序的最少交换次数. 分析:求逆序数,合并排序 #include<cstdio>#include<cstring>#inclu ...

  8. css在各浏览器中的兼容问题

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并 整理了一下.对于web2.0的过度,请尽量用xhtml ...

  9. c 函数及指针学习 6

    不完整声明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* 方法一   */ struct tag_a{ ...

  10. pascal矩阵

    帕斯卡矩阵 1.定义       帕斯卡矩阵:由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵. 杨辉三角形表是二次项 (x+y)^n 展开后的系数随自然数 n 的增大组成的一个三角形表. 如4 ...