zoukankan      html  css  js  c++  java
  • loopj.com android-async-http

    loopj.com android-async-http

    Android异步Http客户端

    用于Android的基于回调的Http客户端库

     

    概述

    基于Apache的HttpClient的基于异步回调的Http客户端 所有请求都是在应用程序的主UI线程之外进行的,但是任何回调逻辑将在相同的线程上执行,因为回调是使用Android的Handler消息传递创建的。你也可以在Service或后台线程中使用它,库会自动识别在哪个上下文中运行。

    如果你也在寻找一个伟大的Android崩溃报告服务,我还建议检查我的公司,Bugsnag

    特征

    • 使用版本4.3.6的上游HttpClient而不是Android提供的DefaultHttpClient
    • 兼容Android API 23及更高版本
    • 创建异步 HTTP请求,处理匿名回调中的响应
    • HTTP请求发生在UI线程之外
    • 请求使用线程池来限制并发资源使用
    • GET / POST 参数构建器(RequestParams)
    • 多部分文件上传,没有其他第三方库
    • 流式JSON上传,无需其他库
    • 处理循环和相对重定向
    • 微小的大小开销到你的应用程序,只有90kb的一切
    • 针对多斑点移动连接优化的自动智能请求重试
    • 自动gzip响应解码支持超快速请求
    • 二进制协议通信 BinaryHttpResponseHandler
    • 内置响应解析成JSON 与JsonHttpResponseHandler
    • 将响应直接保存到文件中 FileAsyncHttpResponseHandler
    • 持久性cookie存储,将cookie保存到您的应用程序的SharedPreferences
    • 与Jackson JSON,Gson或其他JSON(de)序列化库集成 BaseJsonHttpResponseHandler
    • 支持SAX解析器 SaxAsyncHttpResponseHandler
    • 支持语言和内容编码,而不仅仅是UTF-8

    用于顶级应用程序和开发人员的生产

    Instagram
    Instagram是Android上的第一个照片应用程序,有超过1000万的用户
    Pinterest
    热门在线插件。整理和分享您喜爱的内容。
    前线突击队(Glu游戏)
    #1第一人称射击游戏在Android上,由Glu游戏。
    Heyzap
    社交游戏发现应用程序与数百万的用户
    姿势
    Pose是分享和发现新风格的第一个时尚应用程序
    数以千计的应用程式...
    Async HTTP在生产中被数以千计的顶级应用程序使用。

    安装和基本使用

    使用Gradle buildscript在格式中添加maven依赖

    dependencies {
      compile 'com.loopj.android:android-async-http:1.4.9'
    }

    导入http包。

    import com.loopj.android.http.*;

    创建新AsyncHttpClient实例并发出请求:

    AsyncHttpClient client = new AsyncHttpClient();
    client.get("https://www.google.com", new AsyncHttpResponseHandler() {
    
        @Override
        public void onStart() {
            // called before request is started
        }
    
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] response) {
            // called when response HTTP status is "200 OK"
        }
    
        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
            // called when response HTTP status is "4XX" (eg. 401, 403, 404)
        }
    
        @Override
        public void onRetry(int retryNo) {
            // called when request is retried
        }
    });

    在这个例子中,我们将使用具有静态访问器的http客户端类,以便于与Twitter的API进行通信。

    import com.loopj.android.http.*;
    
    public class TwitterRestClient {
      private static final String BASE_URL = "https://api.twitter.com/1/";
    
      private static AsyncHttpClient client = new AsyncHttpClient();
    
      public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
          client.get(getAbsoluteUrl(url), params, responseHandler);
      }
    
      public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
          client.post(getAbsoluteUrl(url), params, responseHandler);
      }
    
      private static String getAbsoluteUrl(String relativeUrl) {
          return BASE_URL + relativeUrl;
      }
    }

    这使得它很容易在你的代码中使用Twitter API:

    import org.json.*;
    import com.loopj.android.http.*;
    
    class TwitterRestClientUsage {
        public void getPublicTimeline() throws JSONException {
            TwitterRestClient.get("statuses/public_timeline.json", null, new JsonHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                    // If the response is JSONObject instead of expected JSONArray
                }
                
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
                    // Pull out the first event on the public timeline
                    JSONObject firstEvent = timeline.get(0);
                    String tweetText = firstEvent.getString("text");
    
                    // Do something with the response
                    System.out.println(tweetText);
                }
            });
        }
    }

    有关更多详细信息请参阅 AsyncHttpClient, RequestParamsAsyncHttpResponseHandler Javadoc。

    这个库还包括一个PersistentCookieStoreApache HttpClient CookieStore接口的实现,它自动将Cookie保存到SharedPreferencesAndroid设备上的存储。

    如果您要使用Cookie来管理身份验证会话,这是非常有用的,因为即使在关闭并重新打开应用程序后,用户仍将保持登录状态。

    首先,创建一个实例AsyncHttpClient

    AsyncHttpClient myClient = new AsyncHttpClient();

    现在将此客户端的Cookie存储设置为一个新的实例 PersistentCookieStore,使用活动或应用程序上下文构建(通常this就足够了):

    PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
    myClient.setCookieStore(myCookieStore);

    从服务器收到的任何cookie现在将存储在持久性cookie存储中。

    要将自己的Cookie添加到商店,只需构建一个新的Cookie并调用addCookie

    BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
    newCookie.setVersion(1);
    newCookie.setDomain("mydomain.com");
    newCookie.setPath("/");
    myCookieStore.addCookie(newCookie);

    有关详细信息,请参阅PersistentCookieStore Javadoc 。

    用GET添加GET / POST参数 RequestParams

    RequestParams类用于可选的GET或POST参数添加到您的要求。RequestParams可以以各种方式建造和建造:

    创建空RequestParams并立即添加一些参数:

    RequestParams params = new RequestParams();
    params.put("key", "value");
    params.put("more", "data");

    RequestParams为单个参数创建

    RequestParams params = new RequestParams("single", "value");

    RequestParams从现有Map的键/值字符串创建

    HashMap<String, String> paramMap = new HashMap<String, String>();
    paramMap.put("key", "value");
    RequestParams params = new RequestParams(paramMap);

    有关更多信息,请参阅RequestParams Javadoc 。

    上传文件 RequestParams

    RequestParams班还支持multipart文件,如下所示:

    添加InputStreamRequestParams上传:

    InputStream myInputStream = blah;
    RequestParams params = new RequestParams();
    params.put("secret_passwords", myInputStream, "passwords.txt");

    向上传File对象添加RequestParams

    File myFile = new File("/path/to/file.png");
    RequestParams params = new RequestParams();
    try {
        params.put("profile_picture", myFile);
    } catch(FileNotFoundException e) {}

    添加一个字节数组RequestParams到上传:

    byte[] myByteArray = blah;
    RequestParams params = new RequestParams();
    params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");

    有关更多信息,请参阅RequestParams Javadoc 。

    下载二进制数据 FileAsyncHttpResponseHandler

    FileAsyncHttpResponseHandler类可用于抓取的二进制数据,如图像和其他文件。例如:

    AsyncHttpClient client = new AsyncHttpClient();
    client.get("https://example.com/file.png", new FileAsyncHttpResponseHandler(/* Context */ this) {
        @Override
        public void onSuccess(int statusCode, Header[] headers, File response) {
            // Do something with the file `response`
        }
    });

    有关详细信息,请参阅FileAsyncHttpResponseHandler Javadoc 。

    添加HTTP基本验证凭据

    在处理使用HTTP基本访问身份验证请求的API服务时,某些请求可能需要用户名/密码凭据。您可以使用该方法setBasicAuth()提供您的凭据。

    为特定请求的任何主机和领域设置用户名/密码。默认情况下,身份验证范围适用于任何主机,端口和领域。

    AsyncHttpClient client = new AsyncHttpClient();
    client.setBasicAuth("username","password/token");
    client.get("https://example.com");

    您还可以提供更具体的验证范围(推荐)

    AsyncHttpClient client = new AsyncHttpClient();
    client.setBasicAuth("username","password", new AuthScope("example.com", 80, AuthScope.ANY_REALM));
    client.get("https://example.com");

    有关更多信息,请参阅RequestParams Javadoc 。

    在设备上测试

    您可以使用提供的示例应用程序在真实设备或仿真器上测试库。示例应用程序实现库的所有重要功能,您可以使用它作为灵感的来源。

    示例应用程序的源代码:https://github.com/loopj/android-async-http/tree/master/sample

    要运行示例应用程序,请克隆android-async-http github存储库并在其根目录中运行命令:

    gradle :sample:installDebug

    这将在连接的设备上安装示例应用程序,所有示例都立即工作,如果没有请在https://github.com/loopj/android-async-http/issues上报告错误报告

    从源头建设

    要从.jar源代码构建一个文件,首先要克隆android-async-http github仓库。然后你必须安装Android SDK和Gradle buildscript,然后运行:

    gradle :library:jarRelease

    这将在路径中生成一个文件{repository_root}/library/build/libs/library-1.4.9.jar

    报告错误或功能请求

    请在此项目的github问题页面上报告任何错误或功能请求:

    https://github.com/loopj/android-async-http/issues

    积分和贡献者

    詹姆斯·史密斯(https://github.com/loopj
    创建者和维护者
    Marek Sebera(https://github.com/smarek
    维护自1.4.4发布
    Noor Dawodhttps://github.com/fineswap
    维护自1.4.5发布
    Luciano Vitti(https://github.com/xAnubiSx
    合作示例应用程序
    Jason Choy(https://github.com/jjwchoy
    添加了对RequestHandle功能的支持
    Micah Fivecoate(https://github.com/m5
    主要贡献者,包括原件 RequestParams
    Droid Fu项目(https://github.com/kaeppler/droid-fu
    灵感和代码更好的http重试
    Rafael Sanches(https://blog.rafaelsanches.com
    原始SimpleMultipartEntity代码
    Anthony Persaud(https://github.com/apersaud
    添加了对HTTP基本身份验证请求的支持。
    Linden Darling(https://github.com/coreform
    增加了对二进制/图像响应的支持

    而许多其他人,贡献在许可证头中的每个文件中列出。您还可以通过查看Github上的项目提交,问题和请求来找到贡献者

    执照

    Android异步Http客户端是在Android友好的Apache许可证版本2.0下发布的。在这里阅读完整的许可证:

    https://www.apache.org/licenses/LICENSE-2.0

    关于作者

    詹姆斯·史密斯,英国企业家和开发商总部设在旧金山。

  • 相关阅读:
    [手游项目2]-25-linux 端口time_wait
    [手游项目2]-24-linux MySql编译安装
    诛仙手游法宝铸元性价比
    法宝精进性价比对比
    [手游项目2]-23-游戏数据存储解决方案
    [手游项目2]-22-lua内存问题
    [手游项目2]-21-死循环排查
    [手游项目2]-20-mysql还原一个库的部分数据
    [手游项目2]-19-EError=1118, Reason=Row size too large (> 8126)
    bzoj1471
  • 原文地址:https://www.cnblogs.com/endv/p/6536879.html
Copyright © 2011-2022 走看看