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

相关文章
|
3月前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
49 0
|
SQL .NET Android开发
【Xamarin.Android】 Async / Await入门
异步编程是风靡一时的移动应用程序开发的很好的理由。使用异步方法对于长时间运行的任务,比如下载数据,有助于保持您的用户界面响应,而不是使用异步方法,或不当使用 async/await,可以使应用程序的UI停止响应用户输入,直到长时间运行的任务完成为止。
1321 0
|
Android开发
【Xamarin.Android】ActivityTask: Android上的Async/Await小帮手
在谷歌开发者大会上,Xamarin组的几个团队成员出席了生命周期的架构组件座谈 (推荐你看看)。虽然提出的解决方案很有趣,但在某些情况下,映射到我们在.NET中已经拥有的模式,它的共鸣与我们这些人因为这些Android生命周期细节让一个特定的C #特征使用较为繁琐: async/await。
1326 0
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
27天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
53 19
|
2月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
27天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
56 14
|
30天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。