Android Asynchronous Http Client的用法实例(详解+源码)
2017-04-16 22:01
681 查看
有用网址:http://www.android100.org/html/201506/19/155632.html
From:http://blog.csdn.net/bruce_shan/article/details/50516692
安卓客户端与后台进行通信有两种办法,即HTTP通信和socket通信,我们这里采用的是HTTP通信的通信方式,基于TCP/IP协议簇。先来比较一下几种HTTP通信方式一, HttpUrlConnection// http地址
String httpUrl = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet?name=jun&paw=123456";
// 获得的数据
String resultData = "";
URL url = null;
try {
//第一步 构造一个URL对象
url = new URL(httpUrl);
} catch (MalformedURLException e) {
Log.e(DEBUG_TAG, "MalformedURLException");
}
if (url != null) {
try {
// 使用HttpURLConnection打开连接
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
// 得到读取的内容(流)
InputStreamReader inputStreamReader = new InputStreamReader(
httpURLConnection.getInputStream());
// 为输出创建BufferedReader
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String inputLine = null;
// 使用循环来读取获得的数据
while (((inputLine = bufferedReader.readLine()) != null)) {
// 我们在每一行后面加上一个"\n"来换行
resultData += inputLine + "\n";
}
// 关闭InputStreamReader
inputStreamReader.close();
// 关闭http连接
httpURLConnection.disconnect();
// 设置显示取得的内容
if (resultData != null) {
mTextView.setText(resultData);
} else {
mTextView.setText("读取的内容为NULL");
}
} catch (IOException e) {
Log.e(DEBUG_TAG, "IOException");
}
} else {
Log.e(DEBUG_TAG, "Url NULL");
}
}
二,
* @param userName
* @param userPass
*/
public void loginByAsyncHttpClientPost(String userName, String userPass) {
AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象
String url = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet?name=jun&paw=123456"; // 定义请求的地址
// 创建请求参数的封装的对象
RequestParams params = new RequestParams();
// 设置请求的参数名和参数值
params.put("username", userName);
// 设置请求的参数名和参数
params.put("userpass", userPass);
//执行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if (statusCode == 200) {
//显示文本
Toast.makeText(LoginActivity.this, new String(responseBody), 1).show();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
error.printStackTrace();// 把错误信息打印出轨迹来
}
});
}
/**
* 采用AsyncHttpClient的Get方式进行实现
* @param userName
* @param userPass
*/
private void loginByAsyncHttpClientGet(String userName, String userPass) {
// 创建异步的客户端对象
AsyncHttpClient client = new AsyncHttpClient();
// 请求的地址
String url = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet";
// 创建请求参数的封装的对象
RequestParams params = new RequestParams();
// 设置请求的参数名和参数值
params.put("username", userName);
// 设置请求的参数名和参数
params.put("userpass", userPass);
Log.i("mm", "到private void loginByAsyncHttpClientGet来了");
// 发送get请求的时候 url地址 相应参数,匿名回调对象
client.get(url, params, new AsyncHttpResponseHandler() {
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());
}
Toast.makeText(LoginActivity.this, "登录成功!", 1).show();
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// 失败处理的方法
Log.i("mm", "到onFailure来了"+"statusCode值"+statusCode+"headers值"+headers+"headers值"+ responseBody+ ""+error);
error.printStackTrace();
Toast.makeText(LoginActivity.this, "登录失败!", 1).show();
}
});
}其他安卓网络请求库方式及其比较可以参考链接:Android 各大网络请求库的比较及实战,android请求库实战-android100学习网http://www.android100.org/html/201506/19/155632.html
通过以上可以看出来,
使用线程池
使用RequestParams类封装请求参数
支持文件上传
持久化cookie到SharedPreferences,个人感觉这一点也是这个库的重要特点,可以很方便的完成一些模拟登录
支持json
支持HTTP Basic Auth
用这个安卓客户端网络通信请求库的时候,首先注意
在Mainifest.xml里面添加一条网络权限许可(事实上只要与网络通信有关这条代码都要加上,这里提醒一下)
具体使用方法参见上面的代码;主要的几个步骤如下: // 1.创建异步请求的客户端对象
AsyncHttpClient client = new AsyncHttpClient(); // 2.定义请求的地址
String url = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet?name=jun&paw=123456";
// 3.创建请求参数的封装的对象
RequestParams params = new RequestParams();
// 4.设置请求的参数名和参数值
params.put("username", userName);
// 5.设置请求的参数名和参数
params.put("userpass", userPass);
//6.执行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if (statusCode == 200) {
}
}
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
其他有什么问题或者想具体了解详细说明,可以参考官网 http://loopj.com/android-async-http/其他参考链接 http://blog.csdn.NET/redarmy_chen/article/details/26980613 http://blog.csdn.net/hil2000/article/details/13949513[code] 对服务器返回json数据的处理:http://blog.csdn.net/hil2000/article/details/13949513
From:http://blog.csdn.net/bruce_shan/article/details/50516692
安卓客户端与后台进行通信有两种办法,即HTTP通信和socket通信,我们这里采用的是HTTP通信的通信方式,基于TCP/IP协议簇。先来比较一下几种HTTP通信方式一, HttpUrlConnection// http地址
String httpUrl = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet?name=jun&paw=123456";
// 获得的数据
String resultData = "";
URL url = null;
try {
//第一步 构造一个URL对象
url = new URL(httpUrl);
} catch (MalformedURLException e) {
Log.e(DEBUG_TAG, "MalformedURLException");
}
if (url != null) {
try {
// 使用HttpURLConnection打开连接
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
// 得到读取的内容(流)
InputStreamReader inputStreamReader = new InputStreamReader(
httpURLConnection.getInputStream());
// 为输出创建BufferedReader
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String inputLine = null;
// 使用循环来读取获得的数据
while (((inputLine = bufferedReader.readLine()) != null)) {
// 我们在每一行后面加上一个"\n"来换行
resultData += inputLine + "\n";
}
// 关闭InputStreamReader
inputStreamReader.close();
// 关闭http连接
httpURLConnection.disconnect();
// 设置显示取得的内容
if (resultData != null) {
mTextView.setText(resultData);
} else {
mTextView.setText("读取的内容为NULL");
}
} catch (IOException e) {
Log.e(DEBUG_TAG, "IOException");
}
} else {
Log.e(DEBUG_TAG, "Url NULL");
}
}
二,
AsyncHttpClient
AsyncHttpClient的Post和GET方式进行实现的关键代码:/** * 采用AsyncHttpClient的Post方式进行实现* @param userName
* @param userPass
*/
public void loginByAsyncHttpClientPost(String userName, String userPass) {
AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象
String url = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet?name=jun&paw=123456"; // 定义请求的地址
// 创建请求参数的封装的对象
RequestParams params = new RequestParams();
// 设置请求的参数名和参数值
params.put("username", userName);
// 设置请求的参数名和参数
params.put("userpass", userPass);
//执行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if (statusCode == 200) {
//显示文本
Toast.makeText(LoginActivity.this, new String(responseBody), 1).show();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
error.printStackTrace();// 把错误信息打印出轨迹来
}
});
}
/**
* 采用AsyncHttpClient的Get方式进行实现
* @param userName
* @param userPass
*/
private void loginByAsyncHttpClientGet(String userName, String userPass) {
// 创建异步的客户端对象
AsyncHttpClient client = new AsyncHttpClient();
// 请求的地址
String url = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet";
// 创建请求参数的封装的对象
RequestParams params = new RequestParams();
// 设置请求的参数名和参数值
params.put("username", userName);
// 设置请求的参数名和参数
params.put("userpass", userPass);
Log.i("mm", "到private void loginByAsyncHttpClientGet来了");
// 发送get请求的时候 url地址 相应参数,匿名回调对象
client.get(url, params, new AsyncHttpResponseHandler() {
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());
}
Toast.makeText(LoginActivity.this, "登录成功!", 1).show();
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// 失败处理的方法
Log.i("mm", "到onFailure来了"+"statusCode值"+statusCode+"headers值"+headers+"headers值"+ responseBody+ ""+error);
error.printStackTrace();
Toast.makeText(LoginActivity.this, "登录失败!", 1).show();
}
});
}其他安卓网络请求库方式及其比较可以参考链接:Android 各大网络请求库的比较及实战,android请求库实战-android100学习网http://www.android100.org/html/201506/19/155632.html
通过以上可以看出来,
AsyncHttpClient这个请求库很好用,简单方便,具有一些很好的特点:
所有请求在子线程中完成,请求回调在调用该请求的线程中完成使用线程池
使用RequestParams类封装请求参数
支持文件上传
持久化cookie到SharedPreferences,个人感觉这一点也是这个库的重要特点,可以很方便的完成一些模拟登录
支持json
支持HTTP Basic Auth
用这个安卓客户端网络通信请求库的时候,首先注意
在Mainifest.xml里面添加一条网络权限许可(事实上只要与网络通信有关这条代码都要加上,这里提醒一下)
具体使用方法参见上面的代码;主要的几个步骤如下: // 1.创建异步请求的客户端对象
AsyncHttpClient client = new AsyncHttpClient(); // 2.定义请求的地址
String url = "http://192.168.1.1:8080/GourmetOrderServer/loginServlet?name=jun&paw=123456";
// 3.创建请求参数的封装的对象
RequestParams params = new RequestParams();
// 4.设置请求的参数名和参数值
params.put("username", userName);
// 5.设置请求的参数名和参数
params.put("userpass", userPass);
//6.执行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if (statusCode == 200) {
}
}
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
其他有什么问题或者想具体了解详细说明,可以参考官网 http://loopj.com/android-async-http/其他参考链接 http://blog.csdn.NET/redarmy_chen/article/details/26980613 http://blog.csdn.net/hil2000/article/details/13949513[code] 对服务器返回json数据的处理:http://blog.csdn.net/hil2000/article/details/13949513
http://blog.csdn.net/yanbober/article/details/45307549
http://www.cnblogs.com/hawkon/p/3593709.html
http://www.cnblogs.com/angeldevil/p/3729808.html
http://my.oschina.net/u/1246663/blog/196971
http://www.tuicool.com/articles/mqme2e[/code]也可以参考我的另外两篇博文,我也是在边学习,然后边记录下这些
相关文章推荐
- Android Asynchronous Http Client的用法实例(详解+源码)
- Android Asynchronous Http Client 开发实例——上传文件
- Android开发之HttpClient异步请求数据的方法详解【附demo源码下载】
- Android HttpClient实例详解--用代码说话
- HttpClient基本用法以及HTTP站点认证实例
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- Android屏幕锁定实例源码详解教程二
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Android屏幕锁定实例源码详解教程二
- android异步网络连接开源:Android Asynchronous Http Client
- Android屏幕锁定实例源码详解教程一
- 使用Android Asynchronous Http Client体会
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Android Asynchronous HTTPClient的实现和优化
- google-http-java-client(android学习篇2源码)
- Android HttpClient和URLConnection两种下载HTML源码的方法
- Android屏幕锁定实例源码详解教程一
- Android Asynchronous Http Client
- Android Asynchronous Http Client
- Android 中HttpURLConnection与HttpClient使用的简单实例