这里有一个非常棒的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 = "http://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 = "http://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 = "http://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 = "http://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 { |