对于Android-Async-Http库来说,不推荐使用,原因有两点:
1、作者已停止维护
2、Android5.0后弃用HttpClient,Android-Async-Http是基于HttpClient库之上的网络请求处理库
该篇文章仅供了解学习使用。
Android-Async-Http的Github地址:https://github.com/loopj/android-async-http
Android-Async-Http官方文档:loopj.com/android-async-http/
官方文档描述此库的特点:
(1)使用4.3.6以上版本的HttpClient来代替Android提供的DefaultHttpClient
(2)兼容Android API 23及以上
(3)发送异步HTTP请求,处理匿名回调中的响应
(4)非UI线程执行HTTP请求
(5)使用线程池来限制并发资源的使用
(6)使用RequestParams作为GET/POST参数构造器
(7)多部分文件上传不需要其它第三方库
(8)JSON数据流的上传不需要额外的库
(9)能处理循环和相对重定向
(10)应用程序开销很小,总共只有90kb
(11)为移动连接自动智能请求重试优化
(12)支持超快的请求自动gzip响应解码
(13)BinaryHttpResponseHandler支持二进制通信协议
(14)使用JsonHttpResponseHandler将内置响应解析为JSON
(15)使用FileAsyncHttpResponseHandler将响应直接保存到文件中
(16)持久cookie存储,将cookie保存到SharedPreferences中
(17)使用BaseJsonHttpResponseHandler与Jackson JSON、GSON、或其他JSON序列化库集成
(18)使用SaxAsyncHttpResponseHandler支持SAX解析器
(19)支持语言和内容编码,而不仅仅是UTF-8
Android-Async-Http是一个强大的网络请求库,这个库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果。
在Android Studio中不需要下载jar包,直接添加依赖即可:
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
接下来再导入http包:
import com.loopj.android.http.*;
1、创建AsyncHttpClient对象;
2、如果需要参数,可以创建RequestParams对象添加参数,如果不需要参数,可跳过这一步;
3、按需要调用AsyncHttpClient的某个GET/POST的方法,传递需要的callback接口实现。
RequestParams类用于向请求中添加可选的GET或POST参数。RequestParams可以以多种方式构建和构造:
RequestParams params = new RequestParams();
params.put("key1", "value1");
params.put("key2", "value2");
RequestParams params = new RequestParams("key", "value");
HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("key", "value");
RequestParams params = new RequestParams(paramMap);
项目简介:采用Android-Async-Http框架,通过访问聚合API查询手机归属地
项目地址:https://github.com/ambition-hb/AndroidAsyncHttpDemo
项目图示:
部分代码如下:
/** * Android-Async-Http的Get和Post请求的使用 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn_get;
private Button btn_post;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_get = (Button)findViewById(R.id.btn_get);
btn_post = (Button)findViewById(R.id.btn_post);
tv = (TextView)findViewById(R.id.tv);
btn_get.setOnClickListener(this);
btn_post.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_get:
Android_Async_Http_Get();
break;
case R.id.btn_post:
Android_Async_Http_Post();
break;
default:
break;
}
}
//Get请求
private void Android_Async_Http_Get(){
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://apis.juhe.cn/mobile/get?phone=13429667914&key=fef8795fcfa0a1977582d8c31b529112";
client.get(url, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
showResponse(new String(responseBody));
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Toast.makeText(MainActivity.this, "Get请求失败!", Toast.LENGTH_SHORT).show();
}
});
}
//Post请求
private void Android_Async_Http_Post(){
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://apis.juhe.cn/mobile/get?";
RequestParams params = new RequestParams();
params.put("phone", "18826593245");
params.put("key", "fef8795fcfa0a1977582d8c31b529112");
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
showResponse(new String(responseBody));
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Toast.makeText(MainActivity.this, "Post请求失败!", Toast.LENGTH_SHORT).show();
}
});
}
private void showResponse(final String response){
//Activity不允许在子线程中进行UI操作
//通过该方法可以将线程切换到主线程,然后再更新UI元素
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(response);
}
});
}
}