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,如需转载请自行联系原作者

相关文章
|
9天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
13 1
|
10天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
36 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
11天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
43 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
2天前
|
监控 Java Android开发
安卓应用开发:打造高效用户界面的五大策略
【4月更文挑战第29天】 在安卓应用开发的世界中,构建一个既美观又高效的用户界面(UI)对于吸引和保留用户至关重要。本文将深入探讨五种策略,这些策略可以帮助开发者优化安卓应用的UI性能。我们将从布局优化讲起,逐步过渡到绘制优化、内存管理、异步处理以及最终的用户交互细节调整。通过这些实践技巧,你将能够为用户提供流畅而直观的体验,确保你的应用在竞争激烈的市场中脱颖而出。
|
1天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第30天】在移动开发领域,尤其是安卓平台上,内存管理是影响应用性能和用户体验的关键因素。由于安卓设备的硬件资源有限,不合理的内存使用会导致应用响应缓慢、消耗过多电量甚至崩溃。本文将探讨针对安卓平台的内存优化技巧,旨在帮助开发者提高应用的性能和稳定性,从而提升用户满意度。我们将详细讨论内存泄漏的预防、合理的内存分配策略以及高效的内存回收方法。
|
1天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
2天前
|
机器学习/深度学习 安全 数据处理
构建未来:基于Android的智能家居控制系统开发
【4月更文挑战第29天】 随着物联网技术的蓬勃发展,智能家居已成为现代技术革新的重要领域。本文将深入探讨基于Android平台的智能家居控制系统的设计和实现,旨在提供一种用户友好、高度集成且功能丰富的解决方案。通过利用Android设备的广泛普及和其强大的处理能力,结合最新的无线通讯技术和人工智能算法,我们旨在打造一个可靠、易用且具有高度可定制性的智能家居控制环境。文中不仅详细阐述了系统架构、关键技术选型以及界面设计,还对可能遇到的安全挑战进行了分析,并提出了相应的解决策略。
|
2天前
|
监控 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第29天】在面对安卓设备多样化的硬件配置时,合理管理应用内存成为提升用户体验的关键。本文深入探讨了安卓应用开发中常见的内存泄漏问题,并提出了一系列针对性的优化策略。通过分析内存分配机制、垃圾回收原理及内存监控工具的使用,揭示了高效内存管理的实践方法。文章旨在为开发者提供一套系统的内存优化解决方案,以实现更流畅、稳定的应用性能。
|
3天前
|
编解码 测试技术 Android开发
安卓应用开发:打造流畅的用户体验
【4月更文挑战第29天】在竞争激烈的应用市场中,一个具有流畅用户体验的安卓应用是吸引和保留用户的关键因素。本文将深入探讨如何通过优化代码、使用高效的架构模式以及利用安卓系统提供的工具来提升应用性能,从而打造出让用户满意的流畅体验。