这里有一个非常棒的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 { |
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中了
有需要的下载源码看吧