这是我重新回到Android,新学习的一篇关于Android-async-http框架的的例子,简单的介绍下,也算自己做的小笔记一篇
先介绍下它是干嘛的
首先 它是第三方开源类库,在Android开发中,请求服务器获取数据太常见了,然后它就是解决一般请求方式的麻烦之处的,简单来说,用了它,以后请求服务器就变得简单啦
其次,看框架名称 带有 async,有经验的开发人员都知道,它是异步的, 既然是异步的 又用在Android里面,这说明它是用在非UI线程的。还有一个好处就是 不用 手动 new Thread线程了, 是不是很好用撒。
擦,还是上代码吧!
1,到官网或者其他什么地方,下载下jar包, 或者源码,都行,随便
2,把jar包导入到你的工程里面 ,并进行build ,如下图
3.如果想看源码,就把源码library\src\main\java的com包黏贴到项目中的src目录下,如下图
4. 就是写主要的代码了。这是封装的一个util
package cn.com.asynchttp;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
public class HttpUtill {
private static AsyncHttpClient client = new AsyncHttpClient();// 实例化对象
static {
client.setTimeout(5000); // 设置连接超时,默认10s
}
/**
* 用一个完整 的url 获取一个String 对象
*
* @param urlString
* @param res
*/
public static void get(String urlString, AsyncHttpResponseHandler res) {
client.get(urlString, res);
}
/**
* url里面带参数
*
* @param urlString
* @param params
* @param res
*/
public static void get(String urlString, RequestParams params, AsyncHttpResponseHandler res) {
client.get(urlString, params, res);
}
/**
* 不带参数,获取json对象或者数组
* @param urlString
* @param res
*/
public static void get(String urlString, JsonHttpResponseHandler res) {
client.get(urlString, res);
}
/**
* 带参数,获取json对象或者数组
* @param urlString
* @param params
* @param res
*/
public static void get(String urlString, RequestParams params, JsonHttpResponseHandler res) {
client.get(urlString, params, res);
}
/**
* 下载数据使用,会返回byte数据
* @param uString
* @param bHandler
*/
public static void get(String uString, BinaryHttpResponseHandler bHandler) {
client.get(uString, bHandler);
}
public static AsyncHttpClient getClient() {
return client;
}
}
接下来就是 Activity了
package cn.com.asynchttp;
import org.apache.http.Header;
import org.apache.http.protocol.HTTP;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import cn.com.R;
/**
* android-aysnc-http框架学习
*
* @author Administrator
*
*/
public class StudyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.studyasynchttp);
Button btn_click = (Button) findViewById(R.id.btn_studyasynchttp_click);
btn_click.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://这是我项目服务器的地址,这里就不贴上了";
RequestParams params = new RequestParams();
params.add("key", "value"); //这里是参数,可以用put也可以用add,随便
params.add("key", "value");
HttpUtill.get(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
System.out.println(" onSuccess -- arg0--------" + arg0);
System.out.println(new String(arg2));//这是服务器返回来的数据了,这是没有源码的,//面是有源码的。
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
System.out.println("onFailure---arg0--------" + arg0);
}
});
HttpUtill.get(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
});
}
}
布局文件,一个按钮
android:layout_height="match_parent"
android:orientation="vertical" >
搜噶,完事!
下面分享下 POST,GET,请求方式! 也是参考别人的, 这都无所谓咯!
/**
* 采用AsyncHttpClient的Post方式进行实现
* @param userName
* @param userPass
*/
public void HttpClientPost(String userName, String userPass) {
AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象
String url = "http://"; // 定义请求的地址
// 创建请求参数的封装的对象
RequestParams params = new RequestParams();
params.put("username", userName); // 设置请求的参数名和参数值
params.put("userpass", userPass);// 设置请求的参数名和参数
// 执行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
/**
* 成功处理的方法
* statusCode:响应的状态码; headers:相应的头信息 比如 响应的时间,响应的服务器 ;
* responseBody:响应内容的字节
*/
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
if (statusCode == 200) {
tv_result.setText(new String(responseBody)); // 设置显示的文本
}
}
/**
* 失败处理的方法
* error:响应失败的错误信息封装到这个异常对象中
*/
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
error.printStackTrace();// 把错误信息打印出轨迹来
}
});
}
GET
/**
* 采用AsyncHttpClient的Get方式进行实现
* @param userName
* @param userPass
*/
public void HttpClientGet(String userName, String userPass) {
// 创建异步的客户端对象
AsyncHttpClient client = new AsyncHttpClient();
String url = ""; // 请求的地址
// 创建请求参数的封装的对象
RequestParams params = new RequestParams();
params.put("username", userName); // 设置请求的参数名和参数值
params.put("userpass", userPass);// 设置请求的参数名和参数
// 发送get请求的时候 url地址 相应参数,匿名回调对象
client.get(url, params,new AsyncHttpResponseHandler() {
@Override
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());
}
// 设置控件内容
tv_result.setText(new String(responseBody));
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// 失败处理的方法
error.printStackTrace();
}
});
}