您的位置:首页 > 理论基础 > 计算机网络

android开源框架android-async-http使用

2013-07-24 17:08 567 查看
android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,下面做简单介绍,具体详细使用看官网:https://github.com/loopj/android-async-http

1.新建项目,去官网下载zip包,解压,打开releases文件,把里面最新的jar包,考入项目工程libs目录下,引入包。

2.通过1,就可以使用了,很简单,下面是自己写的demo,用它提供的各种不同方法完成从服务器获取一个json数据:



查看源码

打印?

01
package
com.http;
02
import
com.loopj.android.http.AsyncHttpClient;
03
import
com.loopj.android.http.AsyncHttpResponseHandler;
04
import
com.loopj.android.http.BinaryHttpResponseHandler;
05
import
com.loopj.android.http.JsonHttpResponseHandler;
06
import
com.loopj.android.http.RequestParams;
07
08
public
class
HttpUtil {
09
private

static
AsyncHttpClient client =
new

AsyncHttpClient();
//实例话对象
10
static
11
{
12
client.setTimeout(
11000
);
//设置链接超时,如果不设置,默认为10s
13
}
14
public

static
void

get(String urlString,AsyncHttpResponseHandler res)
//用一个完整url获取一个string对象
15
{
16
client.get(urlString,res);
17
}
18
public

static
void
get(String urlString,RequestParams params,AsyncHttpResponseHandler res)

//url里面带参数
19
{
20
client.get(urlString,params,res);
21
}
22
public

static
void
get(String urlString,JsonHttpResponseHandler res)
//不带参数,获取json对象或者数组
23
{
24
client.get(urlString,res);
25
}
26
public

static
void
get(String urlString,RequestParams params,JsonHttpResponseHandler res)
//带参数,获取json对象或者数组
27
{
28
client.get(urlString,params,res);
29
}
30
public

static
void
get(String uString,BinaryHttpResponseHandler bHandler)
//下载数据使用,会返回byte数据
31
{
32
client.get(uString,bHandler);
33
}
34
public

static
AsyncHttpClient getClient()
35
{
36
return

client;
37
}
38
}
这个类主要列出了我们常用的get方法,在要使用的地方,调用该类就行了。

具体使用的类:

查看源码

打印?

001
package
com.http;
002
003
import
java.io.File;
004
import
java.io.FileOutputStream;
005
006
import
org.json.JSONArray;
007
import
org.json.JSONObject;
008
009
import
android.app.Activity;
010
import
android.app.ProgressDialog;
011
import
android.os.Bundle;
012
import
android.os.Environment;
013
import
android.util.Log;
014
import
android.view.View;
015
import
android.widget.TextView;
016
import
android.widget.Toast;
017
018
import
com.loopj.android.http.AsyncHttpResponseHandler;
019
import
com.loopj.android.http.BinaryHttpResponseHandler;
020
import
com.loopj.android.http.JsonHttpResponseHandler;
021
import
com.loopj.android.http.RequestParams;
022
023
public
class
MainActivity
extends

Activity {
024
private

TextView textView;
// 顶部textview
025
private

ProgressDialog pDialog;
026
private

TextView textView2;
// 下面textview,显示获取的所有数据
027
@Override
028
protected

void
onCreate(Bundle savedInstanceState) {
029
super
.onCreate(savedInstanceState);
030
setContentView(R.layout.activity_main);
031
textView = (TextView) findViewById(R.id.text);
032
textView2 = (TextView) findViewById(R.id.text2);
033
}
034
public

void
method1(View view) {
035
pDialog = ProgressDialog.show(
this
,
"请稍等"
,
"数据加载中"
);
036
String urlString =
"http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10"
; // 一個獲取菜谱的url地址
037
HttpUtil.get(urlString,
new
AsyncHttpResponseHandler() {
038
public

void
onSuccess(String arg0) {
// 获取数据成功会调用这里
039
pDialog.dismiss();
040
textView.setText(
"获取json数据成功,看下面"
);
041
textView2.setText(arg0);
042
Log.i(
"hck"
,arg0);
043
};
044
public

void
onFailure(Throwable arg0) {
// 失败,调用
045
Toast.makeText(MainActivity.
this
,
"onFailure"
,
046
Toast.LENGTH_LONG).show();
047
};
048
public

void
onFinish() {

// 完成后调用,失败,成功,都要掉
049
};
050
});
051
}
052
public

void
method2(View view) {
053
String urlString =
"http://client.azrj.cn/json/cook/cook_list.jsp?"
;
054
RequestParams params =
new
RequestParams();
// 绑定参数
055
params.put(
"type"
,
"1"
);
056
params.put(
"p"
,
"2"
);
057
params.put(
"size"
,
"10"
);
058
HttpUtil.get(urlString,params,
new
JsonHttpResponseHandler() {
059
public

void
onSuccess(JSONArray arg0) {
// 成功后返回一个JSONArray数据
060
Log.i(
"hck"
,arg0.length() +
""
);
061
try

{
062
textView.setText(
"菜谱名字:"
063
+ arg0.getJSONObject(
2
).getString(
"name"
));
//返回的是JSONArray, 获取JSONArray数据里面的第2个JSONObject对象,然后获取名字为name的数据值
064
}
catch
(Exception e) {
065
Log.e(
"hck"
,e.toString());
066
}
067
};
068
public

void
onFailure(Throwable arg0) {
069
Log.e(
"hck"
,
" onFailure"
+ arg0.toString());
070
};
071
public

void
onFinish() {
072
Log.i(
"hck"
,
"onFinish"
);
073
};
074
public

void
onSuccess(JSONObject arg0) {
//返回的是JSONObject,会调用这里
075
Log.i(
"hck"
,
"onSuccess "
);
076
try

{
077
textView.setText(
"菜谱名字:"
078
+ arg0.getJSONArray(
"list"
).getJSONObject(
0
)
079

.getString(
"name"
));
080
}
catch
(Exception e) {
081
Log.e(
"hck"
,e.toString());
082
}
083
};
084
});
085
}
086
public

void
method3(View view) {
087
String urlString =
"http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10"
;
088
HttpUtil.get(urlString,
new
JsonHttpResponseHandler() {
089
public

void
onSuccess(JSONObject arg0) {
090
try

{
091
textView.setText(
"菜谱名字:"
092
+ arg0.getJSONArray(
"list"
).getJSONObject(
1
)
093

.getString(
"name"
));
094
}
catch
(Exception e) {
095
Log.e(
"hck"
,e.toString());
096
}
097
};
098
});
099
}
100
public

void
method4(View view) {
101
String urlString =
"http://client.azrj.cn/json/cook/cook_list.jsp?"
;
102
final

RequestParams params =
new

RequestParams();
103
params.put(
"type"
,
"1"
);
104
params.put(
"p"
,
"2"
);
105
params.put(
"size"
,
"10"
);
106
HttpUtil.get(urlString,params,
new
AsyncHttpResponseHandler() {
107
public

void
onSuccess(String arg0) {
108
try

{
109
JSONObject jObject =
new
JSONObject(arg0);
110
textView.setText(
"菜谱名字:"
111
+ jObject.getJSONArray(
"list"
).getJSONObject(
2
)
112

.getString(
"name"
));
113
Log.i(
"hck"
,params.getEntity().toString());
114
}
catch
(Exception e) {
115
}
116
};
117
});
118
}
119
public

void
method5(View view) {
120
String url =
"http://f.hiphotos.baidu.com/album/w%3D2048/sign=38c43ff7902397ddd6799f046dbab3b7/9c16fdfaaf51f3dee973bf7495eef01f3b2979d8.jpg"
;
121
HttpUtil.get(url,
new
BinaryHttpResponseHandler() {
122
@Override
123
public

void
onSuccess(
byte
[] arg0) {
124
super
.onSuccess(arg0);
125
File file = Environment.getExternalStorageDirectory();
126
File file2 =
new
File(file,

"cat"
);
127
file2.mkdir();
128
file2 =
new
File(file2,
"cat.jpg"
);
129
try

{
130
FileOutputStream oStream =
new
FileOutputStream(file2);
131
oStream.write(arg0);
132
oStream.flush();
133
oStream.close();
134
textView.setText(
"可爱的猫咪已经保存在sdcard里面"
);
135
}
catch
(Exception e) {
136
e.printStackTrace();
137
Log.i(
"hck"
,e.toString());
138
}
139
}
140
});
141
}
142
}
布局文件:

查看源码

打印?

01
<
ScrollView
02
xmlns:android
=
"http://schemas.android.com/apk/res/android"
03
xmlns:tools
=
"http://schemas.android.com/tools"
04
android:layout_width
=
"match_parent"
05
android:layout_height
=
"match_parent"
06
android:orientation
=
"vertical"
07
android:gravity
=
"center_horizontal"
08
>
09
<
LinearLayout
10
android:layout_width
=
"fill_parent"
11
android:layout_height
=
"fill_parent"
12
android:orientation
=
"vertical"
13
android:gravity
=
"center_horizontal"
>
14
<
TextView
15
android:textColor
=
"#FF0000"
16
android:textSize
=
"16sp"
17
 
android:layout_marginTop
=
"20dp"
18
 
android:gravity
=
"center_horizontal"
19
android:id
=
"@+id/text"
20
android:layout_width
=
"wrap_content"
21
android:layout_height
=
"wrap_content"
22
android:text
=
"获取数据完成后会显示在这里"

/>
23
<
Button
24
android:layout_marginTop
=
"50dp"
25
android:id
=
"@+id/bt1"
26
android:layout_width
=
"wrap_content"
27
android:layout_height
=
"wrap_content"
28
android:text
=
"第一种"
29
android:onClick
=
"method1"
30
/>
31
<
Button
32
android:id
=
"@+id/bt2"
33
android:layout_width
=
"wrap_content"
34
android:layout_height
=
"wrap_content"
35
android:text
=
"第2种"
36
android:onClick
=
"method2"
37
/>
38
<
Button
39
android:id
=
"@+id/bt3"
40
android:layout_width
=
"wrap_content"
41
android:layout_height
=
"wrap_content"
42
android:text
=
"第3种"
43
android:onClick
=
"method3"
44
/>
45
<
Button
46
android:id
=
"@+id/bt4"
47
android:layout_width
=
"wrap_content"
48
android:layout_height
=
"wrap_content"
49
android:text
=
"第4种"
50
android:onClick
=
"method4"
51
/>
52
<
Button
53
android:id
=
"@+id/bt5"
54
android:layout_width
=
"wrap_content"
55
android:layout_height
=
"wrap_content"
56
android:text
=
"第5种"
57
android:onClick
=
"method5"
58
/>
59
<
TextView
60
android:textColor
=
"#FF0000"
61
android:textSize
=
"16sp"
62
 
android:layout_marginTop
=
"20dp"
63
 
android:gravity
=
"center_horizontal"
64
android:id
=
"@+id/text2"
65
android:layout_width
=
"wrap_content"
66
android:layout_height
=
"wrap_content"
67
 
/>
68
</
LinearLayout
>
69
</
ScrollView
>
很简单很实用,上面只是get方法的,上传数据,和这个也差不多,大家自己建个服务器,试试。记得加入网文网络的权限和向sdcard的访问权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: