Android访问网络的4种方法

来源:互联网 发布:淘宝正品化妆品店 编辑:程序博客网 时间:2024/05/19 19:16

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、HttpClientpublic 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return bitmap;}//2.1:使用URLConnection或者HttpURLConnectionpublic 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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);//设置访问方法为postconn.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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);//设置访问方法为getconn.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}//3:建立HttpClientpublic 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:获取httpClientHttpClient client = getHttpClient();//2:建立httpPostHttpPost 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}//3.2使用HttpClient以get方法获取数据,不携带参数public String useHttpClientAndGet(String urlStr){String result = null;if(null == urlStr){return result;}try {//1:获取httpClientHttpClient client = getHttpClient();//2:建立HttpGetHttpGet 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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:获取httpClientHttpClient 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:建立HttpGetHttpGet 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 0
原创粉丝点击