http框架:实现异步访问网络;
使用方法:
(1)创建HttpUtil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
public
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中使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
//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()方法执行之前执行;
本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1606631 ,如需转载请自行联系原作者