这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。
先贴代码:
01 |
public class Activity1 extends Activity { |
03 |
private final String DEBUG_TAG
= "System.out"; |
05 |
private TextView mTextView; |
06 |
private Button mButton; |
08 |
protected void onCreate(Bundle
savedInstanceState) { |
09 |
super.onCreate(savedInstanceState); |
10 |
setContentView(R.layout.main); |
12 |
mTextView = (TextView)
findViewById(R.id.TextView01); |
13 |
mButton = (Button)
findViewById(R.id.Button01); |
14 |
mButton.setOnClickListener(new httpListener()); |
18 |
class httpListener implements OnClickListener
{ |
19 |
public void onClick(View
v) { |
24 |
private void refresh() { |
25 |
String httpUrl
= "http://192.168.0.101:8080/Test/test.jsp"; |
28 |
//
"http://192.168.0.101:8080/Test/test.jsp?par=abcdefg"; |
29 |
String resultData
= ""; |
33 |
url
= new URL(httpUrl); |
34 |
} catch (MalformedURLException
e) { |
35 |
Log.d(DEBUG_TAG, "create
URL Exception"); |
37 |
//
声明HttpURLConnection对象 |
38 |
HttpURLConnection
urlConn = null; |
39 |
//
声明InputStreamReader对象 |
40 |
InputStreamReader in
= null; |
42 |
BufferedReader buffer
= null; |
43 |
String inputLine
= null; |
46 |
//
使用HttpURLConnection打开连接 |
47 |
urlConn
= (HttpURLConnection) url.openConnection(); |
49 |
in
= new InputStreamReader(urlConn.getInputStream()); |
50 |
//
创建BufferReader对象,输出时候用到 |
51 |
buffer
= new BufferedReader(in); |
53 |
while ((inputLine
= buffer.readLine()) != null) { |
55 |
resultData
+= inputLine + "\n"; |
58 |
if (resultData
!= null && !resultData.equals("")) { |
59 |
mTextView.setText(resultData); |
61 |
mTextView.setText("读取的内容为空"); |
63 |
} catch (IOException
e) { |
67 |
//
关闭InputStreamReader |
71 |
} catch (IOException
e) { |
76 |
Log.d(DEBUG_TAG, "URL
is NULL"); |
第二种方式:
001 |
public class Activity2 extends Activity { |
003 |
private final String DEBUG_TAG
= "System.out"; |
005 |
private TextView mTextView; |
006 |
private Button mButton; |
008 |
protected void onCreate(Bundle
savedInstanceState) { |
009 |
super.onCreate(savedInstanceState); |
010 |
setContentView(R.layout.main); |
012 |
mTextView = (TextView)
findViewById(R.id.TextView01); |
013 |
mButton = (Button)
findViewById(R.id.Button01); |
014 |
mButton.setOnClickListener(new httpListener()); |
018 |
class httpListener implements OnClickListener
{ |
019 |
public void onClick(View
v) { |
024 |
private void refresh() { |
025 |
String httpUrl
= "http://192.168.0.101:8080/Test/test.jsp"; |
026 |
String resultData
= ""; |
030 |
url
= new URL(httpUrl); |
031 |
} catch (MalformedURLException
e) { |
032 |
Log.d(DEBUG_TAG, "create
URL Exception"); |
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; |
045 |
//
使用HttpURLConnection打开连接 |
046 |
urlConn
= (HttpURLConnection) url.openConnection(); |
047 |
//
因为这个是POST请求所以要设置为true |
048 |
urlConn.setDoInput(true); |
049 |
urlConn.setDoOutput(true); |
051 |
urlConn.setRequestMethod("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 |
061 |
out
= new DataOutputStream(urlConn.getOutputStream()); |
062 |
String
content = "par=" + URLEncoder.encode("abcdefg","gb2312"); |
064 |
out.writeBytes(content); |
066 |
in
= new InputStreamReader(urlConn.getInputStream()); |
067 |
//
创建BufferReader对象,输出时候用到 |
068 |
buffer
= new BufferedReader(in); |
070 |
while ((inputLine
= buffer.readLine()) != null) { |
072 |
resultData
+= inputLine + "\n"; |
075 |
if (resultData
!= null && !resultData.equals("")) { |
076 |
mTextView.setText(resultData); |
078 |
mTextView.setText("读取的内容为空"); |
080 |
} catch (IOException
e) { |
084 |
//
刷新DataOutputStream流 |
086 |
//
关闭DataOutputStream流 |
088 |
//
关闭InputStreamReader |
091 |
urlConn.disconnect(); |
092 |
} catch (IOException
e) { |
097 |
Log.d(DEBUG_TAG, "URL
is NULL"); |
第三种方式
01 |
public class Activity3 extends Activity{ |
02 |
private TextView mTextView; |
03 |
private Button mButton; |
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()); |
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"; |
18 |
HttpGet
httpRequest = new HttpGet(httpUrl); |
21 |
HttpClient
httpclient = new DefaultHttpClient(); |
22 |
//
请求HttpClient,取的HttpResponse |
23 |
HttpResponse
httpResponse = httpclient.execute(httpRequest); |
25 |
if (httpResponse.getStatusLine().getStatusCode()
== HttpStatus.SC_OK) { |
27 |
String
strResult = EntityUtils.toString(httpResponse.getEntity()); |
29 |
//
在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。 |
30 |
String
strsResult = strResult.replace("\r", ""); |
31 |
mTextView.setText(strsResult); |
33 |
mTextView.setText("请求错误"); |
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()); |
第四种方式
01 |
public class Activity4 extends Activity{ |
02 |
private TextView mTextView; |
03 |
private Button mButton; |
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()); |
14 |
class httpListener implements OnClickListener
{ |
15 |
public void onClick(View
arg0) { |
16 |
String
httpUrl = "http://192.168.0.101:8080/Test/test.jsp"; |
18 |
HttpPost
httpRequest = new HttpPost(httpUrl); |
19 |
//
使用NameValuePair来保存要传递的Post参数 |
20 |
List
params = new ArrayList(); |
22 |
params.add(new BasicNameValuePair("par","HttpClient_android_Post")); |
25 |
HttpEntity
httpentity = newUrlEncodedFormEntity(params,"gb2312"); |
27 |
httpRequest.setEntity(httpentity); |
29 |
HttpClient
httpclient = new DefaultHttpClient(); |
31 |
HttpResponse
httpResponse = httpclient.execute(httpRequest); |
32 |
//
HttpStatus.SC_OK表示连接成功 |
33 |
if (httpResponse.getStatusLine().getStatusCode()
== HttpStatus.SC_OK) { |
35 |
String
strResult = EntityUtils.toString(httpResponse.getEntity()); |
37 |
//
在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。 |
38 |
String
strsResult = strResult.replace("\r", ""); |
39 |
mTextView.setText(strsResult); |
41 |
mTextView.setText("请求错误"); |
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()); |
Android HTTP通讯