一.说起来都是泪

各大组织不同步,可是我想用别人的库。

二.谷歌和阿帕奇的爱恨情仇

初,谷歌安卓新出,库中自带HttpClient 4.0测试预览版。为与安卓保持API同步,HTTPClient不敢大动大改。后来,HTTPClient 4.0渐趋成熟,apache欲使android跟进更新对应的库,android拒绝之。然旧库bug丛生,瑕疵遍地。故今apache新出一个HTTPClient for android。

你说,既然android自带的不好(有些旧),为啥不直接导入apache的呢?因为包名是一样的,库冲突。不是不能解决,也能,麻烦。从apache下载最新的httpclient源码,把每个源文件包名改了,改成跟android不冲突的。然后打包成jar文件,然后导入到android工程的lib里。

三.回归平静

现在,android 6.0已经移除了httpClient,于是世界又恢复了平静。我们可以从apache下载httpClient,然后导入到lib中,不用改名了。

直接使用httpclient很好,apache的httpclient也有相对应的异步请求组件HttpAsyncClient。因为android不允许在UI线程中进行网络请求,所以我们只得通过回调函数(钩子函数)来进行请求结果处理。除了使用apache的httpclient,更好的方式是使用loopj.android.AsyncHttpClient

四. AsyncHttpClient到底基于谁

loopj.android.AsyncHttpClient是James Smith基于httpClient封装的用于android的网络请求包,一开始,它当然是对android自带的httpClient进行封装(也就是apache的);然后apache的httpClient发生了很大改变,loopj要跟谁走?是跟着google继续保守,还是跟上apache更新的步伐?它选择了跟apache走,可是不能直接使用apache的httpClient呀!因为android中自带httpClient,包名冲突啊!所以就改成了cz.msebera.android.httpclient。经常用到的是:

      import cz.msebera.android.httpclient.Header

loopj官网上的要比github上更新慢!今天更新了一下loopj.android.httpClient,发现cz.msebera.android用不了了,于是换成apache 的httpClient,能用了。

于是,一切终归平静。

简而言之,谷歌的android不再自带apache的httpClient,而是把选择权交给程序员。loopj.android.AsyncHttpClient不再无所适从,可以放心的基于apache的httpClient而不用再改包名了。

所以,作为一个独立的组织,不要轻易包含别的组织的东西。因为你一旦包含了,那就没法做到跟人家同步更新!人家是专门干这个活的,你们两个更新步伐不一致,那会很坑的呀。如果必须要使用到别的组织的东西,那就属于依赖,那是另外一回事了。比如ubuntu中sudo apt install eclipse,那eclipse版本不是最新版的,很多bug都未曾修复。像这种明明可以不包含,却非要包含然后又不与人家同步的情况真是不该。

android和httpClient的更多相关文章

  1. android之HttpClient

    Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类. 下面分别讲一下怎么用HttpClient实现get,post请求. 1.Get 请求 HttpGet ...

  2. Android 采用HttpClient提交数据到服务器

    在前几篇文章中<Android 采用get方式提交数据到服务器><Android 采用post方式提交数据到服务器>介绍了android的两种提交数据到服务器的方法 本文继续介 ...

  3. [Android] HttpURLConnection & HttpClient & Socket

    Android的三种网络联接方式 1.标准Java接口:java.net.*提供相关的类//定义地址URL url = new URL("http://www.google.com" ...

  4. android通过HttpClient与服务器JSON交互

    通过昨天对HttpClient的学习,今天封装了HttpClient类 代码如下: package com.tp.soft.util; import java.io.BufferedReader; i ...

  5. android通过httpClient请求获取JSON数据并且解析

    使用.net创建一个ashx文件,并response.write  json格式 public void ProcessRequest(HttpContext context) { context.R ...

  6. Android 使用HttpClient方式提交POST请求

    final String username = usernameEditText.getText().toString().trim(); final String password = passwr ...

  7. Android 使用HttpClient方式提交GET请求

    public void httpClientGet(View view) { final String username = usernameEditText.getText().toString() ...

  8. Android采用HttpClient下载图片

    在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...

  9. Android使用HttpClient向服务器传输文件

    HttpClient是Apache Jakarta Common下的子项目,可以用来提供功能丰富的支持HTTP协议的客户端编程工具包,这几天写客户端的时候遇到个问题,“客户端需要向服务器发送Post请 ...

随机推荐

  1. Struts2开发环境搭建,及一个简单登录功能实例

    首先是搭建Struts2环境. 第一步 下载Struts2去Struts官网 http://struts.apache.org/ 下载Struts2组件.截至目前,struts2最新版本为2.3.1. ...

  2. centos克隆,网卡启动失败

    情形:提示 Device eth0 does not seem to be present 步骤: 1.vmware 克隆,选择full clone 2.启动克隆后的系统,修改ifcfg-eth0,/ ...

  3. 关于response.getWriter()写回数据的实际发生时间点

    只能说自己平时太粗心了,一些细节问题虽然几次路过,都没有注意过,也没有好好想过. 同事负责的一段微信模块的小逻辑,为了防止微信服务器认为没有接收到请求而重发消息,所以再收到微信服务器发回的消息后,马上 ...

  4. 超链接a的target属性

    <a>标签的target意思很明确就是在哪里打开目标文档. 第一种情况: 默认情况:当我们没有设置超链接属性target的value值时默认是_self,即<a target=&qu ...

  5. MATLAB学习(一)——状态好状态坏,自作自受

    状态不好,学学MATLAB做做准备吧. 一.基本情况 1.1 书写 一行写不下? %可以加上三个小黑点(续行符)并按下回车键,然后接下去再写.例如 s=-/+/-/+/-/+/-…- /+/-/+/- ...

  6. Java JDBC高级特性

    1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...

  7. OpenStack Networking overview

    原文地址:http://docs.openstack.org/newton/install-guide-ubuntu/neutron-concepts.html Networking service ...

  8. monkey学习笔记

    Monkey一. Monkey 是什么?Monkey是Android中的一个命令行工具,它其实就是SDK中附带的一个工具,可以运行在模拟器里或实际设备中. 二.Monkey 测试的目的?Monkey测 ...

  9. 利用注解进行sql反射代码示例

    @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String val ...

  10. 项目-基于视频压缩的实时监控系统--tiny6410

    项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...