可以使用 Android 集成进来的 apache 中关于联网的API。

HttpParams : 保存Http请求设定的参数对象

HttpConnectionParams :提供对Http连接参数进行设定的方法,比如 连接超时时间 等。

HttpClient :发起Http连接请求的对象,

HttpResponse :Http 请求返回的响应

最后,其实apache还是提供了释放 连接资源的方法的,不过是埋得深了点。

httpClient.getConnectionManager().shutdown();

这个shutdown并不是将手机网络断掉,而是将建立Http连接请求时所分配的资源释放掉

工具类

/*

* post请求

*/

public static String post(RequestVo vo){

//使用DefaultHttpClient创建HttpClient实例

DefaultHttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(vo.context.getString(R.string.host).concat(vo.context.getString(vo.requestUrl)));

//构建HttpPost

HttpParams params = new BasicHttpParams();//

params = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout(params, 20000); //连接超时

HttpConnectionParams.setSoTimeout(params, 30*1000); //响应超时

post.setParams(params);

String str = null;

/** 保持会话Session **/

/** 设置Cookie **/

MyHttpCookies li = new MyHttpCookies(vo.context);

CookieStore cs = li.getuCookie();

/** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/

if (cs != null) {

client.setCookieStore(li.getuCookie());

System.out.println("session");

}

/** 保持会话Session end **/

try {

//将由Map存储的参数转化为键值参数

if(vo.requestDataMap!=null){

HashMap map = vo.requestDataMap;

ArrayList pairList = new ArrayList();

for(Map.Entry entry:map.entrySet()){

BasicNameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue());

pairList.add(pair);

}

//使用编码构建Post实体

HttpEntity entity = new UrlEncodedFormEntity(pairList,"UTF-8");

//设置Post实体

post.setEntity(entity);

}

//执行Post方法

HttpResponse response = client.execute(post);//包含响应的状态和返回的结果==

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

//获取Cookie

li.setuCookie(client.getCookieStore());

//获取返回实体

String result = EntityUtils.toString(response.getEntity(),"UTF-8");

Log.e(NetUtil.class.getSimpleName(), result);

try {

str = result;

} catch (Exception e) {

Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);

}

return str;

}

} catch (ClientProtocolException e) {

Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);

return null;

} catch (IOException e) {

Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);

return null;

}

return null;

}

/**

* get请求

* @param vo

* @return

*/

public static String get(RequestVo vo, String url){

DefaultHttpClient client = new DefaultHttpClient();

HttpGet get = new HttpGet(url);

String str = null;

/** 保持会话Session **/

// /** 设置Cookie **/

MyHttpCookies li = new MyHttpCookies(vo.context);

CookieStore cs = li.getuCookie();

/** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/

if (cs != null) {

client.setCookieStore(li.getuCookie());

System.out.println("session");

}

// /** 保持会话Session end **/

try {

HttpResponse response = client.execute(get);

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

li.setuCookie(client.getCookieStore());

String result = EntityUtils.toString(response.getEntity(),"UTF-8");

Log.e(NetUtil.class.getSimpleName(), result);

try {

str = result;

} catch (Exception e) {

Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);

}

return str;

}

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

/**

* http请求的缓存和一些公用的参数

* @author llc

*

*/

public class MyHttpCookies {

/** 每页数据显示最大数 */

private static int pageSize = 10;

/** 当前会话后的cokie信息 */

private static CookieStore uCookie = null;

/** 公用的HTTP提示头信息 */

private static Header[] httpHeader;

/** HTTP连接的网络节点 */

private static String httpProxyStr;

/**http请求的公用url部分**/

public static String baseurl = "http://www.2cto.com /River";

/**上下文对象**/

Context context;

public MyHttpCookies(Context context){

this.context = context;

/** y设置请求头 **/

/** y设置请求头 **/

// Header[] header = {

// new BasicHeader("PagingRows", String.valueOf(pageSize)) };

// httpHeader = header;

}

/**

* 增加自动选择网络,自适应cmwap、CMNET、wifi或3G

*/

@SuppressWarnings("static-access")

public void initHTTPProxy() {

WifiManager wifiManager = (WifiManager) (context.getSystemService(context.WIFI_SERVICE));

if (!wifiManager.isWifiEnabled()) {

Uri uri = Uri.parse("content://telephony/carriers/preferapn"); // 获取当前正在使用的APN接入点

Cursor mCursor =context. getContentResolver().query(uri, null, null, null,

null);

if (mCursor != null) {

mCursor.moveToNext(); // 游标移至第一条记录,当然也只有一条

httpProxyStr = mCursor.getString(mCursor.getColumnIndex("proxy"));

}

} else {

httpProxyStr = null;

}

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public CookieStore getuCookie() {

return uCookie;

}

public void setuCookie(CookieStore uCookie) {

this.uCookie = uCookie;

}

public Header[] getHttpHeader() {

return httpHeader;

}

public String getHttpProxyStr() {

return httpProxyStr;

}

}

注:

  1.    使用POST方式时,传递参数必须使用NameValuePair数组

2.    使用GET方式时,通过URL传递参数,注意写法

3.    通过setEntity方法来发送HTTP请求

4.    通过DefaultHttpClient 的 execute方法来获取HttpResponse

5.    通过getEntity()从Response中获取内容

android联网程序,android 联网 HttpClient相关推荐

  1. android连接程序,android程序如何连接真机进行测试

    android 如何连真机测试 个人认为第三种方法更易理解 1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择 ...

  2. android hook 程序,Android hook框架之Xposed插件开发

    上一篇讲了Android hook框架Cydia,这一篇是Android hook的另一个框架Xposed,Xposed是一款广泛应用于安卓领域的开源框架. 其原理是Xposed框架主要通过替换/sy ...

  3. 用自己的手机调试Android应用程序——Android Studio

    最近在学习Android应用开发,一般来说都是用AVD建立的虚拟手机来调试和运行Android应用程序.不过自己的手机也是Android的,所以就是尝试用自己的手机来调试程序.不过在调试之前先做好手机 ...

  4. android 获取程序,Android获取桌面应用程序

    转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/50057029 首先在看这个博客之前, 你可以先看下这个博客,http:// ...

  5. android 照片墙程序,Android照片墙应用

    本文主要内容 照片墙应用介绍 缓存使用思路 多线程使用 杂谈 记得本人工作之后,手头上第一个活就是做一个本地壁纸展示程序,当时正流行1080P的屏幕,为了展示屏幕效果,壁纸图片巨大无比,轻松突破10M ...

  6. 调用android邮件程序,Android开发中怎样调用系统Email发送邮件(多种调用方式)

    我们都知道,在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外. 在Android中,调用Email有三种类型的Intent: Intent.ACTION ...

  7. Android冻结程序,Android Studio 3.0和应用程序冻结

    我已经将我的 android工作室从2.x更新到android 3.0 stable. 从那时起,当我尝试使用cyanogenmod 12.1(android 5.1.1)将应用程序推送到我的Nexu ...

  8. 如何导出android studio程序,Android Studio 如何导出 Jar 给 Unity 使用

    大致步骤如下:1.创建新的 Android Studio 工程2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ja ...

  9. android su 程序,android 开发 制作自己的su

    所需材料: ①.su.c ②.Android.mk 以上玩意可以从源码中获取,或者从网上下载! 如果是从android源码中提取的su,请自行注释掉权限检查部分哈~~~ /// 1. Ubuntu l ...

最新文章

  1. SAP QM 将业务上的偏差管理集成进入SAP系统?
  2. (八)整合spring cloud云服务架构 - commonservice-eureka 项目构建过程
  3. concurrent map使用
  4. 安全狗护航金砖厦门会晤 圆满完成任务
  5. 使用Apollo通过WebSocket通过STOMP轻松进行消息传递
  6. 一条正确的Java职业生涯规划,帮你突破瓶颈
  7. Delphi中TMediaPlayer播放音乐出现no MCI device open的错误的解决方法
  8. Linux内核4.14 LTS发布:那些最新最好的功能特性
  9. R语言大作业(二):上海市人口普查数据分析
  10. PGIS大数据量点位显示方案
  11. 太极图正确画法_八卦太极图的正确画法
  12. dell r710重装系统_DELL R710系统安装指南10页
  13. Python3正则匹配re.split,re.serach,re.sub,re.finditer及re.findall函数用法详解
  14. 数学中的哈斯图如何构造?附实例
  15. apicloud 项目常用插件
  16. 《人生算法》(七)认定方向、坚定执行
  17. 2021-09-252021年中式烹调师(中级)考试技巧及中式烹调师(中级)证考试
  18. 2个阶乘什么意思_两个阶乘符号连在一起是什么意思
  19. Scala语法(一) 基础语法(变量常量判断循环数组集合)
  20. BlockingQueue(阻塞队列)

热门文章

  1. Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题
  2. [云炬学英语]每日一句2020.9.1
  3. 解决IE正常模式与兼容性模式的办法
  4. Delphi指针大全
  5. C++/CLI中的资源清理(Destructor,Finalizer)
  6. 在 C 中引用汇编语言定义的 .globl 变量
  7. 使用u-boot的tftp下载功能烧写程序到Nand Flash ——韦东山嵌入式Linux学习笔记09
  8. 8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07
  9. SpringBoot中请求映射的原理(源码)
  10. 汽车车牌识别系统实现(四)--字符识别+代码实现