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

Android访问网络的4种方法

2014-06-25 09:22 337 查看
1、android访问网络的四种方法

1)URL

2)URLConnection

3)HttpURLConnection

4)HttpClient

2、HttpURLConnection和HttpClient比较:

HttpClient封装性好,操作简单;HttpURLConnection提供流操作,更倾向于底层操作。

3、实例代码:

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

//测试网络访问的方法4种方法
//1、URL
//2、URLConnection
//3、HttpURLConnection
//4、HttpClient
public class TestNet{
private static final String TAG = TestNet.class.getSimpleName();

//1:使用url获取内容
public Bitmap useURL(String urlStr){
Bitmap bitmap = null;
if(null == urlStr){
return bitmap;
}
try {
//建立连接获得网络输入流
URL url = new URL(urlStr);
InputStream is = url.openStream();

//对网络输入流进行处理
bitmap = BitmapFactory.decodeStream(is);
}
catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}

//2.1:使用URLConnection或者HttpURLConnection
public Bitmap useHttpURLConnection(String urlStr){
Bitmap bitmap = null;
if(null == urlStr){
return bitmap;
}
try {
//建立连接获得网络输入流
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
InputStream is = conn.getInputStream();

//对网络输入流进行处理
bitmap = BitmapFactory.decodeStream(is);
}
catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}

//2.2.1:使用HttpURLConnection以Post方式访问网络
public String useHttpURLConnectionAndPost(String urlStr,Map<String,String> map){
String result = null;
if(null == urlStr || null == map){
return result;
}
try {
//1:建立连接
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();

//2:设置连接属性,需要在连接之前完成
//允许从当前连接进行读操作
conn.setDoInput(true);
//允许对当前连接进行写操作
conn.setDoOutput(true);
//设置访问方法为post
conn.setRequestMethod("POST");
//post请求不能使用缓存
conn.setUseCaches(false);
conn.setConnectTimeout(5000);

//			conn.setInstanceFollowRedirects(true);
//			//Content-type:为application/x-www-form-urlencoded
//			conn.setRequestProperty("Contet-Type","application/x-www-form-urlencoded");

//3:建立连接
conn.connect();

//4:获得网络输出流,向输出流写请求数据
OutputStream os = conn.getOutputStream();
//使用DataOutputStream向输出流中写数据
DataOutputStream dos = new DataOutputStream(os);
//String content = key1+"="+URLEncoder.encode(key1Value,"gb2312");
String content = "";
for(Map.Entry<String,String> set : map.entrySet()){
content += URLEncoder.encode(set.getKey(),"UTF-8")+"="+URLEncoder.encode(set.getValue(),"UTF-8");
content += "&";
}
content = content.substring(0,content.length()-1);

dos.write(content.getBytes());   //dos.writeChars(content);使用writeChars不能获取到内容
dos.flush();
dos.close();

//使用PrintWriter向输出流中写数据;使用PrintWriter也可以向输出流中写数据
//			PrintWriter pw = new PrintWriter(os);
//			pw.print(content);
//			pw.flush();
//			pw.close();

//5:获得网络输入流,从网络输入流获取返回内容
InputStream is = conn.getInputStream();
result="";
byte b[] = new byte[1024];
while(-1 != is.read(b)){
result += new String(b);
}

//此法获取的值为null=br.readLine()
//			InputStreamReader isr = new InputStreamReader(is);
//			BufferedReader br = new BufferedReader(isr);
//			result = "";
//			String line = "";
//			while(null != (line = br.readLine())){
//				result += line;
//			}

}
catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return result;
}

//2.3:使用HttpURLConnection以get方式访问网络
public String useHttpURLConnectionAndGet(String urlStr,Map<String,String> map){
String result = null;
if(null == urlStr){
return result;
}
try {
URL url = null;
//1:建立连接获得网络输入流
if(null != map){
StringBuilder sb = new StringBuilder(urlStr);
if(map!=null){
sb.append("?");
for(Map.Entry<String, String> entry: map.entrySet()){
sb.append(entry.getKey()).append("=").append(entry.getValue());
sb.append("&");
}
sb.deleteCharAt(sb.length() - 1 );
}
url = new URL(sb.toString());
}
else{
url = new URL(urlStr);
}
HttpURLConnection conn = (HttpURLConnection)url.openConnection();

//2:设置连接属性,需要在连接之前完成
//允许从当前连接进行读操作
conn.setDoInput(true);
//允许对当前连接进行写操作
conn.setDoOutput(true);
//设置访问方法为get
conn.setRequestMethod("GET");
conn.setUseCaches(false);
conn.setConnectTimeout(5000);
//			conn.setInstanceFollowRedirects(true);
//			//Content-type:为application/x-www-form-urlencoded
//			conn.setRequestProperty("Contet-Type","application/x-www-form-urlencoded");

//3:建立连接
conn.connect();

//4:获得网络输入流,从网络输入流获取返回内容
InputStream is = conn.getInputStream();
result="";
byte b[] = new byte[1024];
while(-1 != is.read(b)){
result += new String(b);
}

}
catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}

//3:建立HttpClient
public HttpClient getHttpClient(){
HttpClient client = new DefaultHttpClient();
HttpParams httpParams = client.getParams();

//设置连接参数,设置连接超时,socket超时
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);
HttpConnectionParams.setTcpNoDelay(httpParams, true);
HttpClientParams.setRedirecting(httpParams, true);
//		HttpProtocolParams.setUserAgent(httpParams,
//						"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.10 (maverick) Firefox/3.6.15");
//		HttpProtocolParams.setUseExpectContinue(httpParams, false);
//		httpParams.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2965);

return client;
}

//3.1使用HttpClient以pst方法获取数据
public String useHttpClientAndPost(String urlStr,Map<String,String> map){
String result = null;
if(null == urlStr || null == map){
return result;
}

try {
//1:获取httpClient
HttpClient client = getHttpClient();

//2:建立httpPost
HttpPost post = new HttpPost(urlStr);

//3:设置请求参数
Li
4000
st<NameValuePair> params = new LinkedList<NameValuePair>();
for(Map.Entry<String,String> set : map.entrySet()){
params.add(new BasicNameValuePair(set.getKey(),set.getValue()));
}
//对请求参数进行编码
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
post.setEntity(entity);

//4:执行请求,获得响应
HttpResponse response = client.execute(post);
if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode()){
result = EntityUtils.toString(response.getEntity());
}
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return result;
}

//3.2使用HttpClient以get方法获取数据,不携带参数
public String useHttpClientAndGet(String urlStr){
String result = null;
if(null == urlStr){
return result;
}

try {
//1:获取httpClient
HttpClient client = getHttpClient();

//2:建立HttpGet
HttpGet get = new HttpGet(urlStr);

//3:执行请求,获得响应
//addCookies(get);
HttpResponse response = client.execute(get);
if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode()){
result = EntityUtils.toString(response.getEntity());
}
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}

//3.3使用HttpClient以get方法获取数据,携带参数
public String useHttpClientAndGet(String urlStr,Map<String,String> map){
String result = null;
if(null == urlStr || null == map){
return result;
}

try {
//1:获取httpClient
HttpClient client = getHttpClient();

//2:设置参数
StringBuffer sb = new StringBuffer(urlStr);
sb.append("?");
for(Map.Entry<String,String> set : map.entrySet()){
sb.append(set.getKey()+"="+set.getValue());
sb.append("&");
}
sb = sb.deleteCharAt(sb.length()-1);

//3:建立HttpGet
HttpGet get = new HttpGet(sb.toString());

//4:执行请求,获得响应
HttpResponse response = client.execute(get);
if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode()){
result = EntityUtils.toString(response.getEntity());
}
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}

//增加当前cookie到请求
public void addCookies(HttpGet request)
{
Map<String,String> cookMap = new HashMap<String,String>();
StringBuilder sb = new StringBuilder();
Iterator iter = cookMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String key = entry.getKey().toString();
String val = entry.getValue().toString();
sb.append(key);
sb.append("=");
sb.append(val);
sb.append(";");
}
request.addHeader("cookie", sb.toString());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: