访问后台服务端资源是企业移动应用的必备功能。Android 自身的库中包含有 Apache Http Client 库,可以用来访问 Rest API, 但因为网络访问比较耗时,为保持UI的流畅,Android 不允许在主线程(MainThread) 访问网络的,所以网络相关的操作都需要是异步的,虽然 Android 标准库中提供了有些方式帮助完成异步处理,但都比较复杂。本文演示使用 AsyncHttpClient 库来简化开发工作。
AsyncHttpClient 是一个开源的实现。官网
安装 AsyncHttpClient
在 app 模块的 build.gradle 文件的 dependencies 块中加入 AsyncHttpClient 的依赖:
1 | implementation 'com.loopj.android:android-async-http:1.4.9' |
Android Stuido 会自动下载相关的依赖库。
申请网络权限
在 AndroidManifest.xml 中加入以下代码,为应用程序申请网络权限
1 | <uses-permission android:name="android.permission.INTERNET" /> |
使用 POST 方法
使用 AsyncHttpClient 时,我们首先建立一个 AsyncHttpClient 的实例。 然后调用 addHeader 加入需要的 head 信息(通常需要查看后端接口定义)。然后执行对应的 http 方法。 在示例中,演示执行 POST 方法。
执行的结果是以回调的方式进行处理的。具体就是需要实现 HttpResponseHandler 接口,在该接口中,包含一些方法,典型的就是: onSuccess - 当调用成功时会被执行,onFailure - 当调用失败时会被执行。
在示例代码中,按照通常的 rest api 设计方式,以 json 对象作为返回值,所以直接使用了 JsonHttpResponseHandler。
1 | AsyncHttpClient client = new AsyncHttpClient(); |
在Reqeust中添加参数
AsyncHttpClient 提供了一个 RequestParams 作为管理请求参数的类。但它适用于参数是 Form 形式的情况,如果在Body中是 json 对象(字符串),有该如何呢?
- 首先构造一个 JSONObject 对象作为保存参数的实体
- 把参数赋值到 JSONObject 中
- 将 JSONObject 转换为 StirngEntity (这实际上是 HttpClient 中的一个参数类型)
- 调用对应的 HTTP 方法
示例代码如下:
1 | AsyncHttpClient client = new AsyncHttpClient(); |