Android-非常棒的HTTP通讯总结
这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。
先贴代码:
01
|
public class Activity1 extends Activity
{
|
02
|
03
|
private final String
DEBUG_TAG = "System.out" ;
|
04
|
05
|
private TextView
mTextView;
|
06
|
private Button
mButton;
|
07
|
08
|
protected void onCreate(Bundle
savedInstanceState) {
|
09
|
super .onCreate(savedInstanceState);
|
10
|
setContentView(R.layout.main);
|
11
|
12
|
mTextView
= (TextView) findViewById(R.id.TextView01);
|
13
|
mButton
= (Button) findViewById(R.id.Button01);
|
14
|
mButton.setOnClickListener( new httpListener());
|
15
|
}
|
16
|
17
|
//
设置按钮监听器
|
18
|
class httpListener implements OnClickListener
{
|
19
|
public void onClick(View
v) {
|
20
|
refresh();
|
21
|
}
|
22
|
}
|
23
|
24
|
private void refresh()
{
|
25
|
String
httpUrl = "https://192.168.0.101:8080/Test/test.jsp" ;
|
26
|
//
URL可以加参数
|
27
|
//
String httpUrl =
|
29
|
String
resultData = "" ;
|
30
|
URL
url = null ;
|
31
|
try {
|
32
|
//
创建一个URL对象
|
33
|
url
= new URL(httpUrl);
|
34
|
} catch (MalformedURLException
e) {
|
35
|
Log.d(DEBUG_TAG, "create
URL Exception" );
|
36
|
}
|
37
|
//
声明HttpURLConnection对象
|
38
|
HttpURLConnection
urlConn = null ;
|
39
|
//
声明InputStreamReader对象
|
40
|
InputStreamReader
in = null ;
|
41
|
//
声明BufferedReader对象
|
42
|
BufferedReader
buffer = null ;
|
43
|
String
inputLine = null ;
|
44
|
if (url
!= null )
{
|
45
|
try {
|
46
|
//
使用HttpURLConnection打开连接
|
47
|
urlConn
= (HttpURLConnection) url.openConnection();
|
48
|
//
得到读取的内容(流)
|
49
|
in
= new InputStreamReader(urlConn.getInputStream());
|
50
|
//
创建BufferReader对象,输出时候用到
|
51
|
buffer
= new BufferedReader(in);
|
52
|
//
使用循环来读取数据
|
53
|
while ((inputLine
= buffer.readLine()) != null )
{
|
54
|
//
在每一行后面加上换行
|
55
|
resultData
+= inputLine + "\n" ;
|
56
|
}
|
57
|
//
设置显示取的的内容
|
58
|
if (resultData
!= null &&
!resultData.equals( "" ))
{
|
59
|
mTextView.setText(resultData);
|
60
|
} else {
|
61
|
mTextView.setText( "读取的内容为空" );
|
62
|
}
|
63
|
} catch (IOException
e) {
|
64
|
e.printStackTrace();
|
65
|
} finally {
|
66
|
try {
|
67
|
//
关闭InputStreamReader
|
68
|
in.close();
|
69
|
//
关闭URL连接
|
70
|
urlConn.disconnect();
|
71
|
} catch (IOException
e) {
|
72
|
e.printStackTrace();
|
73
|
}
|
74
|
}
|
75
|
} else {
|
76
|
Log.d(DEBUG_TAG, "URL
is NULL" );
|
77
|
}
|
78
|
}
|
79
|
}
|
第二种方式:
001
|
public class Activity2 extends Activity
{
|
002
|
003
|
private final String
DEBUG_TAG = "System.out" ;
|
004
|
005
|
private TextView
mTextView;
|
006
|
private Button
mButton;
|
007
|
008
|
protected void onCreate(Bundle
savedInstanceState) {
|
009
|
super .onCreate(savedInstanceState);
|
010
|
setContentView(R.layout.main);
|
011
|
012
|
mTextView
= (TextView) findViewById(R.id.TextView01);
|
013
|
mButton
= (Button) findViewById(R.id.Button01);
|
014
|
mButton.setOnClickListener( new httpListener());
|
015
|
}
|
016
|
017
|
//
设置按钮监听器
|
018
|
class httpListener implements OnClickListener
{
|
019
|
public void onClick(View
v) {
|
020
|
refresh();
|
021
|
}
|
022
|
}
|
023
|
024
|
private void refresh()
{
|
025
|
String
httpUrl = "https://192.168.0.101:8080/Test/test.jsp" ;
|
026
|
String
resultData = "" ;
|
027
|
URL
url = null ;
|
028
|
try {
|
029
|
//
创建一个URL对象
|
030
|
url
= new URL(httpUrl);
|
031
|
} catch (MalformedURLException
e) {
|
032
|
Log.d(DEBUG_TAG, "create
URL Exception" );
|
033
|
}
|
034
|
//
声明HttpURLConnection对象
|
035
|
HttpURLConnection
urlConn = null ;
|
036
|
//
声明InputStreamReader对象
|
037
|
InputStreamReader
in = null ;
|
038
|
//
声明BufferedReader对象
|
039
|
BufferedReader
buffer = null ;
|
040
|
String
inputLine = null ;
|
041
|
//
声明DataOutputStream流
|
042
|
DataOutputStream
out = null ;
|
043
|
if (url
!= null )
{
|
044
|
try {
|
045
|
//
使用HttpURLConnection打开连接
|
046
|
urlConn
= (HttpURLConnection) url.openConnection();
|
047
|
//
因为这个是POST请求所以要设置为true
|
048
|
urlConn.setDoInput( true );
|
049
|
urlConn.setDoOutput( true );
|
050
|
//
设置POST方式
|
051
|
urlConn.setRequestMethod( "POST" );
|
052
|
//
POST请求不能设置缓存
|
053
|
urlConn.setUseCaches( false );
|
054
|
urlConn.setInstanceFollowRedirects( false );
|
055
|
//
配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
|
056
|
urlConn.setRequestProperty( "Content-Type" , "application/x-www-form-urlencoded" );
|
057
|
//
连接,从postUrl.openConnection()至此的配置必须要在connect之前完成
|
058
|
//
要注意的是connectio.getOutputStream会隐含的进行connect
|
059
|
urlConn.connect();
|
060
|
//
DataOutputStream流
|
061
|
out
= new DataOutputStream(urlConn.getOutputStream());
|
062
|
String
content = "par=" +
URLEncoder.encode( "abcdefg" , "gb2312" );
|
063
|
//
将要上传的内容写入流中
|
064
|
out.writeBytes(content);
|
065
|
//
得到读取的内容(流)
|
066
|
in
= new InputStreamReader(urlConn.getInputStream());
|
067
|
//
创建BufferReader对象,输出时候用到
|
068
|
buffer
= new BufferedReader(in);
|
069
|
//
使用循环来读取数据
|
070
|
while ((inputLine
= buffer.readLine()) != null )
{
|
071
|
//
在每一行后面加上换行
|
072
|
resultData
+= inputLine + "\n" ;
|
073
|
}
|
074
|
//
设置显示取的的内容
|
075
|
if (resultData
!= null &&
!resultData.equals( "" ))
{
|
076
|
mTextView.setText(resultData);
|
077
|
} else {
|
078
|
mTextView.setText( "读取的内容为空" );
|
079
|
}
|
080
|
} catch (IOException
e) {
|
081
|
e.printStackTrace();
|
082
|
} finally {
|
083
|
try {
|
084
|
//
刷新DataOutputStream流
|
085
|
out.flush();
|
086
|
//
关闭DataOutputStream流
|
087
|
out.close();
|
088
|
//
关闭InputStreamReader
|
089
|
in.close();
|
090
|
//
关闭URL连接
|
091
|
urlConn.disconnect();
|
092
|
} catch (IOException
e) {
|
093
|
e.printStackTrace();
|
094
|
}
|
095
|
}
|
096
|
} else {
|
097
|
Log.d(DEBUG_TAG, "URL
is NULL" );
|
098
|
}
|
099
|
}
|
100
|
}
|
第三种方式
01
|
public class Activity3 extends Activity{
|
02
|
private TextView
mTextView;
|
03
|
private Button
mButton;
|
04
|
05
|
protected void onCreate(Bundle
savedInstanceState) {
|
06
|
super .onCreate(savedInstanceState);
|
07
|
setContentView(R.layout.main);
|
08
|
mTextView
= (TextView) findViewById(R.id.TextView01);
|
09
|
mButton
= (Button) findViewById(R.id.Button01);
|
10
|
mButton.setOnClickListener( new httpListener());
|
11
|
}
|
12
|
13
|
//
设置按钮监听器
|
14
|
class httpListener implements OnClickListener
{
|
15
|
public void onClick(View
v) {
|
16
|
String
httpUrl = "https://192.168.0.101:8080/Test/test.jsp?par=HttpClient_android_Get" ;
|
17
|
//
HttpGet连接对象
|
18
|
HttpGet
httpRequest = new HttpGet(httpUrl);
|
19
|
try {
|
20
|
//
取的HttpClient对象
|
21
|
HttpClient
httpclient = new DefaultHttpClient();
|
22
|
//
请求HttpClient,取的HttpResponse
|
23
|
HttpResponse
httpResponse = httpclient.execute(httpRequest);
|
24
|
//
请求成功
|
25
|
if (httpResponse.getStatusLine().getStatusCode()
== HttpStatus.SC_OK) {
|
26
|
//
取的返回的字符串
|
27
|
String
strResult = EntityUtils.toString(httpResponse.getEntity());
|
28
|
//
这个返回值可能会在行尾出现小方格
|
29
|
//
在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
|
30
|
String
strsResult = strResult.replace( "\r" , "" );
|
31
|
mTextView.setText(strsResult);
|
32
|
} else {
|
33
|
mTextView.setText( "请求错误" );
|
34
|
}
|
35
|
} catch (ClientProtocolException
e) {
|
36
|
mTextView.setText(e.getMessage().toString());
|
37
|
} catch (IOException
e) {
|
38
|
mTextView.setText(e.getMessage().toString());
|
39
|
} catch (Exception
e) {
|
40
|
mTextView.setText(e.getMessage().toString());
|
41
|
}
|
42
|
}
|
43
|
}
|
44
|
}
|
第四种方式
01
|
public class Activity4 extends Activity{
|
02
|
private TextView
mTextView;
|
03
|
private Button
mButton;
|
04
|
05
|
protected void onCreate(Bundle
savedInstanceState) {
|
06
|
super .onCreate(savedInstanceState);
|
07
|
setContentView(R.layout.main);
|
08
|
mTextView
= (TextView) findViewById(R.id.TextView01);
|
09
|
mButton
= (Button) findViewById(R.id.Button01);
|
10
|
mButton.setOnClickListener( new httpListener());
|
11
|
}
|
12
|
13
|
//
设置按钮监听器
|
14
|
class httpListener implements OnClickListener
{
|
15
|
public void onClick(View
arg0) {
|
16
|
String
httpUrl = "https://192.168.0.101:8080/Test/test.jsp" ;
|
17
|
//
创建HttpPost连接对象
|
18
|
HttpPost
httpRequest = new HttpPost(httpUrl);
|
19
|
//
使用NameValuePair来保存要传递的Post参数
|
20
|
List
params = new ArrayList();
|
21
|
//
添加要传递的参数
|
22
|
params.add( new BasicNameValuePair( "par" , "HttpClient_android_Post" ));
|
23
|
try {
|
24
|
//
设置字符集
|
25
|
HttpEntity
httpentity = new UrlEncodedFormEntity(params, "gb2312" );
|
26
|
//
请求httpRequest
|
27
|
httpRequest.setEntity(httpentity);
|
28
|
//
取的默认的HttpClient
|
29
|
HttpClient
httpclient = new DefaultHttpClient();
|
30
|
//
取的HttpResponse
|
31
|
HttpResponse
httpResponse = httpclient.execute(httpRequest);
|
32
|
//
HttpStatus.SC_OK表示连接成功
|
33
|
if (httpResponse.getStatusLine().getStatusCode()
== HttpStatus.SC_OK) {
|
34
|
//
取的返回的字符串
|
35
|
String
strResult = EntityUtils.toString(httpResponse.getEntity());
|
36
|
//
这个返回值可能会在行尾出现小方格
|
37
|
//
在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
|
38
|
String
strsResult = strResult.replace( "\r" , "" );
|
39
|
mTextView.setText(strsResult);
|
40
|
} else {
|
41
|
mTextView.setText( "请求错误" );
|
42
|
}
|
43
|
} catch (ClientProtocolException
e) {
|
44
|
mTextView.setText(e.getMessage().toString());
|
45
|
} catch (IOException
e) {
|
46
|
mTextView.setText(e.getMessage().toString());
|
47
|
} catch (Exception
e) {
|
48
|
mTextView.setText(e.getMessage().toString());
|
49
|
}
|
50
|
}
|
51
|
}
|
52
|
}
|
我把它写到一个项目的4个Activity中了
有需要的下载源码看吧
最后更新:2017-04-02 06:51:59