http框架:实现异步访问网络;
使用方法:
(1)创建HttpUtilpublic class HttpUtil {
private static AsyncHttpClient client = new AsyncHttpClient(); // 实例话对象
static {
client.setTimeout(11000); // 设置链接超时,如果不设置,默认为10s
}
/**
* url不带参数返回String
* @param urlString url
* @param res 处理handler
*/
public static void get(String urlString, AsyncHttpResponseHandler res){
client.get(urlString, res);
}
/**
* url带参数返回String
* @param urlString url
* @param params url中的参数
* @param res 处理handler
*/
public static void get(String urlString, RequestParams params,AsyncHttpResponseHandler res){ // url里面带参数
client.get(urlString, params, res);
}
/**
* 不带参数返回json
* @param urlString url
* @param res 处理handler
*/
public static void get(String urlString, JsonHttpResponseHandler res){ // 不带参数,获取json对象或者数组
client.get(urlString, res);
}
/**
* 带参数,返回json
* @param urlString url
* @param params url参数
* @param res 处理handler
*/
public static void get(String urlString, RequestParams params,JsonHttpResponseHandler res){ // 带参数,获取json对象或者数组
client.get(urlString, params, res);
}
/**
* 不带参数,返回byte数据
* @param uString url
* @param bHandler 处理handler
*/
public static void get(String uString, BinaryHttpResponseHandler bHandler){ // 下载数据使用,会返回byte数据
client.get(uString, bHandler);
}
/**
* 带参数的post 请求c#
* @param url
* @param params
* @param responseHandler
*/
public static void post(Context context,String url,HttpEntity entity, ResponseHandlerInterface responseHandler){
client.post(context, url, entity, "application/json", responseHandler);//关键是设置content-type = "application/json"
}
public static AsyncHttpClient getClient() {
return client;
}
}
(2)在Activity中使用//url获取
String url = getString(R.string.url);
//初始化网络请求参数
RequestParams params = new RequestParams();
params.put(username, username);
params.put(password, password);
//网络请求,处理返回数据
HttpUtil.get(MyConsts.URL_LOGIN, params, new JsonHttpResponseHandler(){
//网络请求成功
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
//成功获取网络数据,在这里处理网络返回的数据
}
//服务器请求失败
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) { //访网络失败
}
//请求结束,不管成功与否都调用该方法
public void onFinish() {
//无论成功与否都会执行该方法
}
});
//使用post请求c#服务
String username = et_RegisterUsername.getText().toString();
String password = et_RegisterPasswd.getText().toString();
String realname = et_RegisterTruename.getText().toString();
if (Valid.valid(username) && Valid.stringIsEmail(username)
&& Valid.valid(password) && Valid.valid(realname)) {
//将参数按照键值对的形式添加到一个json对象中,因为与c#交互需要传递一个json串
JSONObject json = new JSONObject();
try {
json.put(usernameP, username);
json.put(passwordP, password);
json.put(realNameP, realname);
json.put(originP, origin);
StringEntity entity = new StringEntity(json.toString());
HttpUtil.post(LoginActivity.this, url, entity,
new JsonHttpResponseHandler() {
public void onFinish() {
cancelProgressDialog();
}
public void onFailure(int statusCode,
Header[] headers, String responseString,
Throwable throwable) {
Log.d("failure:", responseString);
}
public void onSuccess(int statusCode,
Header[] headers, JSONObject response) {
}
});
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
特别注意:onFinish方法在onSucess()和onFailure()方法执行之前执行;