android和httpClient

时间:2021-08-19 02:38:08

一.说起来都是泪

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

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

初,谷歌安卓新出,库中自带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. &lbrack;Android&rsqb; HttpURLConnection &amp&semi; HttpClient &amp&semi; Socket

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

  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. opencv直线检测在c&num;、Android和ios下的实现方法

    opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...

  2. bash广播

    terminal1$: mkfifo script_name terminal2$: cat script_name terminal1$: script -f script_name 可以发广播到t ...

  3. gulp初涉

    1.什么是gulp? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用它,不仅可以很 ...

  4. ant&lowbar;0105

    在projectA中执行projectB的构件文件.projectA的构件文件内容如下 <?xml version="1.0"?> <!-- 在projectA中 ...

  5. Delph组件如何使用自己的图标&lpar;转&rpar;

    源:http://blog.csdn.net/henreash/article/details/7298451

  6. dummy&lowbar;backend&lowbar;queue&period;go

    ) } func (d *dummyBackendQueue) Empty() error {     return nil }

  7. select2 下拉无法显示

    .select2-container--open{ z-index: 99999;}

  8. ztree实现中国省市区树形,可多选

    首先表 CREATE TABLE `sys_area` ( `id` INT(11) NOT NULL COMMENT '编号', `parent_id` INT(11) NOT NULL COMME ...

  9. springboot 升级到2&period;0后 context-path 配置 不起作用,不生效 不管用 皆是因为版本改动导致的在这里记录一下

    不知不觉,新的项目已经将springboot升级为2.0版本了.刚开始没有配置server.contextpath,默认的“/”,然后今天放到自己的服务器上,所以就要规范名称.  结果,失败了,无论我 ...

  10. servlet生成验证码代码

    package forward; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt ...