Android Asynchronous Http Client 网络请求 SDK

发布于 2024-04-07 03:52:49 字数 2640 浏览 21 评论 0

在 Android 的 SDK 中封装一些请求 http 的包,其中最常用的便是使用 HttpClient 了,我们一般都是自己定义一个 http 的工具类,然后把 get 和 post 方法封装起来,然后自己手动处理一些 http 的异常,值得注意的是 http 请求在 android 中是阻碍 UI 主线程的,所以必须开启新的线程在后台请求,所以这一来,发现只是发起一个 http 的请求就必须要做这么多事,而且自己封装的工具类也不一定是最好用的。

上面便是我以前的做法,本周在做 moya 的 app 时,重新审视了以前的代码,进行了一些重构。其中的一个地方便是使用了一个比较成熟的组件 android-async-http 来代替自己封装的 http 工具类,使用起来非常方便,省去了一些臃肿的代码,使代码总体看起来比较清晰。

Overview

android-async-http 是基于 Apache 的 HttpClient 异步 Http 请求封装类,全部 request 都是脱离 UI 主线程的。这个包已经非常成熟了,国外有名的 Instagram,Pinterest 等 apps 都在使用。

Installation & Basic Usage

下载最新的.jar 文件,在自己的 android app 中引用。

import com.loopj.android.http.*;

创建一个新的 AsyncHttpClient 实例并发起一个请求:

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

建议的用法:创建一个静态基类 Http Client

import com.loopj.android.http.*;

public class BooheeClient {
  private static final String BASE_URL = "http://www.boohee.com/api/";

  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;
  }
}

然后在整个工程的其他地方便很方便的调用:

import org.json.*;
import com.loopj.android.http.*;

class BooheeClientUsage {
    public void getPublicTimeline() throws JSONException {
        BooheeClient.get("moya_video", null, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(JSONObject video) {
                // Pull out the first event on the public timeline
                String normal_url = video.getString("normal_url");

                // Do something with the response
                System.out.println(normal_url);
            }
        });
    }
}

上面的例子看到,对于 json 数据的处理也非常方便。不仅如此,还有其他更多的用法,如处理 cookie,上传、下载文件等。github 项目地址: android-async-http

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

故乡的云

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文