Android访问网络的4种方法

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:设置请求参数
			List<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());
    } 
	
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值