`
chriszeng87
  • 浏览: 738943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android开发实现HttpClient工具类

阅读更多

在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过它的API我们可以很方便的发出GET,POST请求(当然它的功能远不止这些)。 
  比如你只需以下几行代码就能发出一个简单的GET请求并打印响应结果: 

  

Java代码  收藏代码
  1. try {  
  2.           // 创建一个默认的HttpClient  
  3.           HttpClient httpclient = new DefaultHttpClient();  
  4.           // 创建一个GET请求  
  5.           HttpGet request = new HttpGet("www.google.com");  
  6.           // 发送GET请求,并将响应内容转换成字符串  
  7.           String response = httpclient.execute(request, new BasicResponseHandler());  
  8.           Log.v("response text", response);  
  9.       } catch (ClientProtocolException e) {  
  10.           e.printStackTrace();  
  11.       } catch (IOException e) {  
  12.           e.printStackTrace();  
  13.       }  



  为什么要使用单例HttpClient? 
  这只是一段演示代码,实际的项目中的请求与响应处理会复杂一些,并且还要考虑到代码的容错性,但是这并不是本篇的重点。注意代码的第三行: 

  

Java代码  收藏代码
  1. HttpClient httpclient = new DefaultHttpClient();  



  在发出HTTP请求前,我们先创建了一个HttpClient对象。那么,在实际项目中,我们很可能在多处需要进行HTTP通信,这时候我们不需要为每个请求都创建一个新的HttpClient。因为之前已经提到,HttpClient就像一个小型的浏览器,对于整个应用,我们只需要一个HttpClient就够了。看到这里,一定有人心里想,这有什么难的,用单例啊!!就像这样: 

  

Java代码  收藏代码
  1. public class CustomerHttpClient {  
  2.       private static HttpClient customerHttpClient;  
  3.       
  4.       private CustomerHttpClient() {  
  5.       }  
  6.       
  7.       public static HttpClient getHttpClient() {  
  8.           if(null == customerHttpClient) {  
  9.               customerHttpClient = new DefaultHttpClient();  
  10.           }  
  11.           return customerHttpClient;  
  12.       }  
  13.   }  



  多线程!试想,现在我们的应用程序使用同一个HttpClient来管理所有的Http请求,一旦出现并发请求,那么一定会出现多线程的问题。这就好像我们的浏览器只有一个标签页却有多个用户,A要上google,B要上baidu,这时浏览器就会忙不过来了。幸运的是,HttpClient提供了创建线程安全对象的API,帮助我们能很快地得到线程安全的“浏览器”。 

  解决多线程问题 

  

Java代码  收藏代码
  1. public class CustomerHttpClient {  
  2.       private static final String CHARSET = HTTP.UTF_8;  
  3.       private static HttpClient customerHttpClient;  
  4.   
  5.       private CustomerHttpClient() {  
  6.       }  
  7.   
  8.       public static synchronized HttpClient getHttpClient() {  
  9.           if (null == customerHttpClient) {  
  10.               HttpParams params = new BasicHttpParams();  
  11.               // 设置一些基本参数  
  12.               HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  
  13.               HttpProtocolParams.setContentCharset(params,  
  14.                       CHARSET);  
  15.               HttpProtocolParams.setUseExpectContinue(params, true);  
  16.               HttpProtocolParams  
  17.                       .setUserAgent(  
  18.                               params,  
  19.                               "Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "  
  20.                                       + "AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1");  
  21.               // 超时设置  
  22.               /* 从连接池中取连接的超时时间 */  
  23.               ConnManagerParams.setTimeout(params, 1000);  
  24.               /* 连接超时 */  
  25.               HttpConnectionParams.setConnectionTimeout(params, 2000);  
  26.               /* 请求超时 */  
  27.               HttpConnectionParams.setSoTimeout(params, 4000);  
  28.               
  29.               // 设置我们的HttpClient支持HTTP和HTTPS两种模式  
  30.               SchemeRegistry schReg = new SchemeRegistry();  
  31.               schReg.register(new Scheme("http", PlainSocketFactory  
  32.                       .getSocketFactory(), 80));  
  33.               schReg.register(new Scheme("https", SSLSocketFactory  
  34.                       .getSocketFactory(), 443));  
  35.   
  36.               // 使用线程安全的连接管理来创建HttpClient  
  37.               ClientConnectionManager conMgr = new ThreadSafeClientConnManager(  
  38.                       params, schReg);  
  39.               customerHttpClient = new DefaultHttpClient(conMgr, params);  
  40.           }  
  41.           return customerHttpClient;  
  42.       }  
  43.   }  



  在上面的getHttpClient()方法中,我们为HttpClient配置了一些基本参数和超时设置,然后使用ThreadSafeClientConnManager来创建线程安全的HttpClient。上面的代码提到了3种超时设置,比较容易搞混,故在此特作辨析。

 

 

转自:http://xierh21.iteye.com/blog/1236654

分享到:
评论

相关推荐

    Android HttpClient工具类

    在Android开发中,HttpClient是一个常用的网络通信库,用于与服务器进行HTTP交互。虽然在Android API Level 23之后被标记为废弃,但仍有许多开发者选择继续使用它,因为它的功能强大且灵活。本篇文章将深入探讨...

    Android-HttpClient工具类简单轻松的实现getpostput和delete请求

    本篇文章将详细讲解如何使用`HttpClient`工具类来简化这些网络请求的实现。 首先,我们需要引入`HttpClient`的相关依赖。在Android Studio中,如果使用的是旧版本的Android SDK(低于API 22),系统自带了`...

    Android的HttpClient开发实例

    总的来说,`HttpClient`是Android开发中处理网络请求的重要工具,虽然现在有其他的替代方案,如OkHttp和Retrofit,但理解它的原理和使用方法对于开发者来说仍然是有益的。通过这个实例,你可以了解到网络通信的基本...

    Android 封装的工具类

    在Android开发中,工具类(Utils Class)是程序员经常创建的一种辅助代码结构,用来封装一些通用功能,提高代码的复用性和可维护性。这里提到的"Android 封装的工具类"涵盖了几种关键的模块,包括网络请求、数据库...

    android 常用工具类集合

    在Android开发过程中,工具类集合是非常重要的一部分,它们可以极大地提高开发效率,简化代码,使得开发者能够更加专注于业务逻辑。本篇文章将详细讲解"android常用工具类集合"中涉及的关键知识点,包括网络连接、...

    android httpclient demo

    在Android开发中,HTTP通信是应用与服务器交互的重要方式之一,`Android HttpClient`库就是用于实现这一功能的工具。本文将深入探讨如何使用`Android HttpClient`进行HTTP请求,包括GET、POST、PUT和DELETE等常见...

    Android HttpClient与Json解析

    在Android开发中,HttpClient是一个重要的库,用于执行HTTP请求,获取网络上的数据。它允许开发者发送GET、POST等HTTP方法的请求,获取服务器响应,并处理返回的数据。在本示例中,HttpClient被用来从服务器获取数据...

    Android HttpClient源码

    HttpClient提供了一套完整的机制,可以设置请求头、处理Cookie、管理连接池,这在爬虫开发中非常有用。 在使用HttpClient时,有几个关键概念需要理解: 1. **HttpParams**: 这是用来设置HttpClient参数的对象,如...

    android各种工具类

    在Android开发中,工具类是开发者经常会用到的辅助代码集合,它们可以帮助我们高效地处理各种常见任务。本文将深入探讨“android各种工具类”这一主题,包括文件操作、日期处理、图片处理、系统服务利用、网络通信...

    Android_HttpClient_jar包+HttpClientJarAndSource

    总结,HttpClient是Android早期网络通信的重要工具,虽然在新版本中被HttpURLConnection替代,但其丰富的功能和灵活性仍使它在某些场景下具有价值。通过深入学习和使用HttpClient,开发者可以更好地掌握网络请求的...

    Android使用HttpClient上传文件到服务器完整实例

    在Android开发中,有时我们需要将本地的文件上传到服务器,例如图片、音频或者视频等。在本实例中,我们将探讨如何使用Apache的HttpClient库来实现这个功能。HttpClient是一个强大的HTTP客户端,它允许开发者发送...

    android开发揭秘PDF

    前言 第一部分 准备篇 ...14.4.1 Activity类实现 14.4.2 流程控制和线程 14.4.3 游戏对象与对象管理 14.4.4 图形引擎 14.4.5 物理引擎 14.4.6 事件模块 14.4.7 工具模块 14.4.8 脚本引擎、音效模块、网络 模块

    Android httpclient httpmine4j

    在Android开发中,进行HTTP通信是一项常见的任务,而Apache HttpClient是一个流行的选择,它提供了丰富的功能,包括文件上传。然而,Android原生的HttpClient并不支持Multipart/form-data类型的请求,这在上传文件时...

    android webdav工具类

    这个工具类通常会使用Apache的 HttpClient 或者OkHttp库来实现对WebDAV服务器的通信。 3. **Jackrabbit**: Jackrabbit是Apache基金会的一个开源项目,它提供了一个全面的Java Content Repository (JCR) 实现,也...

    Android HttpClientDemo

    在Android开发中,网络通信是应用功能不可或缺的一部分。HttpClient是一个常用的网络请求库,尤其是在早期的Android版本中。本文将深入探讨Android中的HttpClientDemo及其在实际应用中的使用。 首先,我们来理解`...

    Android开发中Broadcast,HttpClient及JSONParser的使用.pdf

    在 Android 应用开发中,Broadcast(广播)、HttpClient 和 JSONParser 是三个关键的技术组件,用于实现不同功能间的通信、网络数据交互和数据解析。以下是对这三个技术的详细说明: 1. **Broadcast(广播)** ...

    淘淘商城工具类.zip。。。。。。。

    淘淘商城工具类.zip是一个包含一系列用于淘淘商城开发的工具类代码的压缩包。这些工具类通常是为了提高开发效率,...在实际开发过程中,开发者应当根据项目的具体需求选择和定制这些工具类,以实现最佳的性能和功能。

    Android开发案例驱动教程 配套代码

    15.2.2 Java URL类实现方式 377 15.2.3 Apache HttpClient实现方式 378 15.3 数据交换格式 380 15.3.1 纯文本格式 381 15.3.2 XML格式 381 15.3.3 JSON格式 385 15.4 自定义服务器端程序实例 387 15.4.1 Java...

    httppost和httpclient一组开发包

    总结来说,`HttpClient`和`HttpPost`是Android开发中处理HTTP请求的重要工具,虽然已不再被官方推荐,但它们的稳定性和灵活性使其在某些情况下仍然具有较高的实用性。了解和掌握这些知识,可以帮助开发者更好地进行...

Global site tag (gtag.js) - Google Analytics