博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android-HttpClient和HttpURLConnection判断网络连接
阅读量:6046 次
发布时间:2019-06-20

本文共 2878 字,大约阅读时间需要 9 分钟。

在android项目中,经常需要用到网络,而在联网之前前,我们都要做一次网络的判断,判断当前的网络状态是否可用,然后开始请求网络。

 

android中请求网络方式有:HttpURLConnection和HttpClient:

  第一种方式:HttpURLConnection

 

/**

* 使用HttpURLConnection请求Internet

* @param context   context对象

 

 * @param isNeedProxy  是否需要代理

 

* @param requestUrl  请求的URL

* @param param   请求的参数

* @return  返回一个inputstream流

*/

public static InputStream getHttpURLConnectionInputStream(Context context,boolean isNeedProxy,String requestUrl,Map<String, String> param) {

 

URL url;

HttpURLConnection conn = null;

InputStream input = null;

try {

url = new URL(requestUrl);

if(isNeedProxy)   //当请求的网络为需要使用代理时

{

Proxy proxy = new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress("192.168.1.23", 80));

conn = (HttpURLConnection) url.openConnection(proxy);

}else{

      conn = url.openConnection();

       }

conn.setConnectTimeout(10000);    //请求超时

conn.setRequestMethod("POST");  //请求方式

conn.setReadTimeout(1000);   //读取超时

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

       conn.setRequestProperty("Charset", "UTF-8");

       conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

OutputStream os = conn.getOutputStream();    

StringBuilder sb = new StringBuilder();

Iterator<String> it = param.keySet().iterator();

while (it.hasNext()) {

String key = it.next();

String value = param.get(key);

sb.append(key).append("=").append(value).append("&");

}

String p = sb.toString().substring(0, sb.length()-1);

       os.write(p.getBytes("utf-8"));

       os.close();

       if(conn!=null)

       {

       input = conn.getInputStream();

       }

 

} catch (Exception e) {

e.printStackTrace();

}

return input;

}

上面这种方式就是HttpURLConnection ,这种方式在android开发中也是比较常用的。

第二种方式:HttpClient

 

/**

 * 使用HttpURLConnection请求Internet

 * @param context   context对象

 * @param isNeedProxy  是否需要代理

 * @param requestUrl  请求的URL

 * @param param   请求的参数

 * @return  返回一个inputstream流

 */

public static InputStream getHttpClientInputStream(Context context,boolean isNeedProxy,String requestUrl, Map<String, String> param)throws Exception {

HttpClient client = new DefaultHttpClient();

if(isNeedProxy)    //当请求的网络为需要使用代理时

HttpHost proxy = new HttpHost("192.168.1.23", 80);

client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,

proxy);

}

HttpPost hp = new HttpPost(requestUrl);

hp.setHeader("Charset", "UTF-8");

hp.setHeader("Content-Type", "application/x-www-form-urlencoded");

List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();

 

Iterator<String> it = param.keySet().iterator();

while (it.hasNext()) {

String key = it.next();

list.add(new BasicNameValuePair(key, param.get(key)));

}

hp.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));

HttpResponse response = null;

response = client.execute(hp);

return response.getEntity().getContent();

}

注意:这里的response.getEntity().getContent()只能使用一次,如果调用了多次会抛异常:java.lang.IllegalStateException: Content has been consumed

HttpClient通常比HttpURLConnection要好用些。

转载于:https://www.cnblogs.com/fx2008/archive/2013/06/12/3133221.html

你可能感兴趣的文章
全球4G排名:新加坡45兆网速第一、信号韩国最好
查看>>
2017年分布式光伏的正确“打开”方式
查看>>
智能时代,深度学习和大数据成了密不可分的一对儿
查看>>
中国存储三大势力成形 各自进击
查看>>
ALE新战略三板斧:行业化,云服务和渠道
查看>>
“北上深杭”成大数据企业聚集地
查看>>
物联网迎来最好的时代
查看>>
服务器托管机房选择
查看>>
Rays Power Infra将在印度建立100MW光伏项目
查看>>
Java EE供应商和伦敦Java用户组宣布新的MicroProfile
查看>>
创新监管 把握物联网、宽带发展机遇
查看>>
微软上线基于云端的BUG发现项目Project Springfield
查看>>
数据披露苹果频繁反对其他公司申请专利
查看>>
浅谈视频质量诊断系统在银行监控系统中的运用
查看>>
昌盛日电转型电力全系统服务
查看>>
G3视频监控推进广东“无线城市”建设
查看>>
报道称苹果欲自行设计服务器
查看>>
固态磁盘性能发展之现状
查看>>
未来数据中心网络三大武器: SDN、VDC、Overlay
查看>>
物联网应用将对MCU市场场所积极影响
查看>>