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

相关文章
|
1月前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
20 0
|
SQL .NET Android开发
【Xamarin.Android】 Async / Await入门
异步编程是风靡一时的移动应用程序开发的很好的理由。使用异步方法对于长时间运行的任务,比如下载数据,有助于保持您的用户界面响应,而不是使用异步方法,或不当使用 async/await,可以使应用程序的UI停止响应用户输入,直到长时间运行的任务完成为止。
1312 0
|
Android开发
【Xamarin.Android】ActivityTask: Android上的Async/Await小帮手
在谷歌开发者大会上,Xamarin组的几个团队成员出席了生命周期的架构组件座谈 (推荐你看看)。虽然提出的解决方案很有趣,但在某些情况下,映射到我们在.NET中已经拥有的模式,它的共鸣与我们这些人因为这些Android生命周期细节让一个特定的C #特征使用较为繁琐: async/await。
1320 0
|
1天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
1天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
9天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
8天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
21 5
|
6天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
下一篇
无影云桌面