一、出现的情况

在eclipse或 android studio开发,

设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http等等,会出现有一些类找不到的错误。

二、原因

android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类).

三、解决方法

1.eclipse:

libs中加入
org.apache.http.legacy.jar

上面的jar包在:**\android-sdk-windows\platforms\android-23\optional下(需要下载android 6.0的SDK)
2.android studio:
在相应的module下的build.gradle中加入:
android {
    useLibrary 'org.apache.http.legacy'
}
注意放置的位置:是在android {}中
可以参考:

https://developer.Android.com/preview/behavior-changes.html

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

初,谷歌安卓新出,库中自带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 6.0 SDK中删除HttpClient的相关类的解决方法的更多相关文章

  1. android6.0SDK 删除HttpClient的相关类的解决方法

    本文转载自博客:http://blog.csdn.net/yangqingqo/article/details/48214865 android6.0SDK中删除HttpClient的相关类的解决方法 ...

  2. Android 6.0删除Apache HttpClient相关类的解决方法

    相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...

  3. express 3.0.x 中默认不支持layout.ejs的解决方法

    1.第一种方法用include 用<% include 模板名(可不加.ejs) %>的写法,具体如下 <% include header %> //套用布局拆成两部分 hea ...

  4. Android 6.0 SDK 找不到HttpClient的解决方法

    一.情况描述 在eclipse或Android Studio开发时(笔者目前只用过Android Studio),设置Android SDK的编译版本为23时,且使用了httpClient相关类的库项 ...

  5. Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView

    SurfaceView, GLSurfaceView, SurfaceTexture以及TextureView是Android当中名字比较绕,关系又比较密切的几个类.本文基于Android 5.0(L ...

  6. linux中删除文件内空白行的几种方法。

    linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...

  7. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  8. ASP.NET MVC中对Model进行分步验证的解决方法

    原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...

  9. DirectX SDK (June 2010)安装错误S1023的一个解决方法

    在安装DXSDK_Jun10.exe时一个常见的安装失败的代号是S1023,一般出现这种错误的原因是系统中已经安装了Visual Studio 2010及以上的版本. 在[控制面板]中找到这两个: 如 ...

随机推荐

  1. UVALive 6656 Watching the Kangaroo --二分

    题意:给你一些区间,再查询一些点,问这些点与所有区间形成的最小距离的最大值.最小距离定义为:如果点在区间内,那么最小距离为0,否则为min(pos-L[i],R[i]-pos). 解法:当然要排个序, ...

  2. Hadoop 一二事(1) - 简单介绍与杂谈

    大数据大数据,身边很多朋友都在谈大数据,Big Data!!! 到底是什么,用来干嘛的,也很少有人说得出一二,那今天开始就简单说说这一二事吧 hadoop 的来源:是作者女儿的一个玩具 - 一只黄色的 ...

  3. 003医疗项目-关于<context:property-placeholder location="classpath:db.properties"/>的问题

    项目结构如下:

  4. 【WPF】FillRule

    获取或设置如何组合此 GeometryGroup 中所包含对象的相交区域. Dependency property identifier field: FillRuleProperty FillRul ...

  5. mysql-advanced-5.6.23-linux-glibc2.5-x86_64安装

    0,二进制安装: mysql-advanced-5.6.23-linux-glibc2.5-x86_64.zip   1,软件包 mysql-advanced-5.6.23-linux-glibc2. ...

  6. Android调用基于.net的WebService

    在实际开发项目中,有时候会为Android开发团队提供一些接口,一般是以asmx文件的方式来承载.而公布出去的数据一般上都是标准的json数据.但是在实际过程中,发现Android团队那边并不是通过将 ...

  7. 【转】其实你不知道MultiDex到底有多坑

    遭遇MultiDex 愉快地写着Android代码的总悟君往工程里引入了一个默默无闻的jar然后Run了一下, 经过漫长的等待AndroidStudio构建失败了. 于是带着疑惑查看错误信息. UNE ...

  8. AWS S3使用小结

    使用场景一:储存网站的图片,并能被任何人访问 1. 创建一个bucket,名字与需要绑定的域名一致. 例如,根域名是mysite.com,希望把所有图片放在pic.mysite.com下面,访问的时候 ...

  9. Java实验四 TCP客户端和服务器的应用

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全 4.对通信内容进行摘要计算并验证 实验步骤 1.信息安全传送: 发送方A——————>接收方B A加密时,用B ...

  10. Opencv step by step - 配置文件

    有时候,我们需要用配置文件存储一些图像或者视频的信息. 先来一个简单的例子: #include <cv.h> #include <highgui.h> int main(int ...