Android访问网络的4种方法
2014-06-25 09:22
337 查看
1、android访问网络的四种方法
1)URL
2)URLConnection
3)HttpURLConnection
4)HttpClient
2、HttpURLConnection和HttpClient比较:
HttpClient封装性好,操作简单;HttpURLConnection提供流操作,更倾向于底层操作。
3、实例代码:
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()); } }
相关文章推荐
- Android学习指南之三十:使用URLConnection和HttpClient访问网络的方法
- Android之loadUrl访问网络资源与本地资源的方法
- Android提供了4种在其他线程中访问UI线程的方法
- android 访问网络不能在主线程中进行以及在线程中操作UI的解决方法
- Android 用HttpURLConnection访问网络的方法
- android 提供访问主线程的4种方法
- Android程序访问网络时The operation timed out错误解决方法
- Android之loadUrl访问网络资源与本地资源的方法
- Android 通过get和post方法访问网络
- Android低阶之【chapter - 6】Handler结合网络访问的使用方法,通过Handler实现异步网络请求
- android主线程访问网络的方法
- Android使用HttpClient多线程访问网络错误解决方法之一
- android主线程访问网络失败的解决方法
- Android之loadUrl访问网络资源与本地资源的方法
- android 访问网络的方法
- Popup窗口访问父窗口的4种方法以及相互传值
- xp 系统不能够通过网络访问解决方法
- Android开发循序渐进实例5--网络访问例子