android-async-http

简介:

Android-async-http开源项目可以Overview(概况)

     An asynchronous callback-based Http client for Android built on top of Apache’s HttpClient libraries. All requests are made outside of your app’s main UI thread, but any callback logic will be executed on the same thread as the callback was created using Android’s Handler message passing.

译文:

  异步基于回调的Http客户端为Android构建,是基于Apache HttpClient库的。所有的请求都是位于应用程序主线程 UI 之外,但任何回调逻辑将相同的线程上执行回调,使用Android的处理程序创建消息传递。

1.2 Features(特征)

  • Make asynchronous HTTP requests, handle responses in  HTTP requests happen  Requests use a  请求使用threadpool,限制并发资源使用情况
  • GET/POST  GET / POST参数构建使用(RequestParams)
  • Multipart 文件上传,没有额外的第三方库
  • Tiny size overhead to your application, only  在你的应用程序上利用很小的开销,仅仅25 kb就可以做一切
  • Automatic smart request retries optimized for spotty mobile connections
  • 自动智能请求重试,优化了质量不一的移动连接
  • Automatic  自动解码支持gzip反应速度超快的请求
  • Binary file (images etc) downloading with  Built-in response parsing into JsonHttpResponseHandler
  • 持久化cookie存储,保存cookie到你的应用程序的SharedPreferences

2.Installation & Basic Usage(安装和基本用法)

     Download the latest .jar file from github and place it in your Android app’s  folder.

     从github上下载最新的最新的jar文件.并将其放置在你的Android应用程序的libs /文件夹.

 2.1下载方式:

    1.从http://loopj.com/android-async-http/的页面下载

点击DownLoad即可下载最新的jar文件

   2.从https://github.com/loopj/android-async-http的页面下载


找到DownLoad ZIP进行下载文件,解压后的目录如下


examples:里面有简单的例子

library:里面存放的是android-async-http开源项目的源码(方法一:可以把library\src\main\Java文件下面的文件拷贝到,你应用的src下也可以直接使用)

releases:里面存放的是各个版本的jar文件,(方法二:只需把最新的jar文件拷贝到你应用的libs目录下即可.)

samples:里面存放的也是例子(可供参考)

 

 

 根据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的代码(代码中详细加了注释,请仔细阅读)

 

复制代码
    package com.example.lesson03;  
      
    import org.apache.http.Header;  
      
    import com.loopj.android.http.AsyncHttpClient;  
    import com.loopj.android.http.AsyncHttpResponseHandler;  
    import com.loopj.android.http.RequestParams;  
      
    import android.app.Activity;  
    import android.os.Bundle;  
    import android.text.TextUtils;  
    import android.view.View;  
    import android.widget.EditText;  
    import android.widget.TextView;  
    import android.widget.Toast;  
      
    public class LoginActivity extends Activity {  
      
        // 声明控件  
        private EditText et_name, et_pass;  
        private TextView tv_result;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
      
            // 获取控件对象  
            et_name = (EditText) findViewById(R.id.et_name);  
            et_pass = (EditText) findViewById(R.id.et_pass);  
            tv_result = (TextView) findViewById(R.id.tv_result);  
        }  
      
        /** 
         * 点击按钮控件触发的事件 
         * @param v 
         */  
        public void login(View v) {  
            //获取控件的id  
            int id = v.getId();  
            //根据id判断进行相应的处理  
            switch (id) {  
            case R.id.btn_login:  
                // 获取控件的文本内容  
                String userName = et_name.getText().toString();// 用户名  
                String userPass = et_pass.getText().toString();// 用户密码  
                //判断用户名和密码是否为空  
                if (TextUtils.isEmpty(userName.trim())  
                        || TextUtils.isEmpty(userPass.trim())) {  
                    Toast.makeText(this, "用户名或者密码不能为空", Toast.LENGTH_LONG).show();  
                } else {  
                    // 发送请求给服务器  
                    //调用:loginByAsyncHttpClientPost(userName, userPass);  
                    loginByAsyncHttpClientGet(userName, userPass);  
                }  
                break;  
            }  
        }  
      
        /** 
         * 采用AsyncHttpClient的Post方式进行实现 
         * @param userName 
         * @param userPass 
         */  
        public void loginByAsyncHttpClientPost(String userName, String userPass) {  
            AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象  
            String url = "http://172.16.237.200:8080/video/login.do"; // 定义请求的地址  
            // 创建请求参数的封装的对象  
            RequestParams params = new RequestParams();  
            params.put("username", userName); // 设置请求的参数名和参数值  
            params.put("userpass", userPass);// 设置请求的参数名和参数  
            // 执行post方法  
            client.post(url, params, new AsyncHttpResponseHandler() {  
                /** 
                 * 成功处理的方法 
                 * statusCode:响应的状态码; headers:相应的头信息 比如 响应的时间,响应的服务器 ; 
                 * responseBody:响应内容的字节 
                 */  
                @Override  
                public void onSuccess(int statusCode, Header[] headers,  
                        byte[] responseBody) {  
                    if (statusCode == 200) {  
                        tv_result.setText(new String(responseBody)); // 设置显示的文本  
                    }  
                }  
      
                /** 
                 * 失败处理的方法 
                 * error:响应失败的错误信息封装到这个异常对象中 
                 */  
                @Override  
                public void onFailure(int statusCode, Header[] headers,  
                        byte[] responseBody, Throwable error) {  
                    error.printStackTrace();// 把错误信息打印出轨迹来  
                }  
            });  
        }  
      
        /** 
         * 采用AsyncHttpClient的Get方式进行实现 
         * @param userName 
         * @param userPass 
         */  
        public void loginByAsyncHttpClientGet(String userName, String userPass) {  
            // 创建异步的客户端对象  
            AsyncHttpClient client = new AsyncHttpClient();  
            // 请求的地址  
            String url = "http://172.16.237.200:8080/video/login.do";  
            // 创建请求参数的封装的对象  
            RequestParams params = new RequestParams();  
            params.put("username", userName); // 设置请求的参数名和参数值  
            params.put("userpass", userPass);// 设置请求的参数名和参数  
              
            // 发送get请求的时候 url地址 相应参数,匿名回调对象  
            client.get(url, params,new AsyncHttpResponseHandler() {  
                @Override  
                public void onSuccess(int statusCode, Header[] headers,  
                        byte[] responseBody) {  
                    // 成功处理的方法  
                    System.out  
                            .println("statusCode-------------------" + statusCode);  
                    // 遍历头信息  
                    for (int i = 0; i < headers.length; i++) {  
                        Header header = headers[i];  
                        System.out.println("header------------Name:"  
                                + header.getName() + ",--Value:"  
                                + header.getValue());  
                    }  
                    // 设置控件内容  
                    tv_result.setText(new String(responseBody));  
                }  
      
                @Override  
                public void onFailure(int statusCode, Header[] headers,  
                        byte[] responseBody, Throwable error) {  
                    // 失败处理的方法  
                    error.printStackTrace();  
                }  
            });  
        }  
      
    }  
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5556309.html,如需转载请自行联系原作者

相关文章
|
20天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
94 0
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
30 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
11天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
20天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
10 0
|
20天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
27天前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
17 1