android 6.0 SDK中删除HttpClient的相关类的解决方法
一、出现的情况
在eclipse或 android studio开发,
设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http等等,会出现有一些类找不到的错误。
二、原因
android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类).
三、解决方法
1.eclipse:
上面的jar包在:**\android-sdk-windows\platforms\android-23\optional下(需要下载android 6.0的SDK)
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的相关类的解决方法的更多相关文章
- android6.0SDK 删除HttpClient的相关类的解决方法
本文转载自博客:http://blog.csdn.net/yangqingqo/article/details/48214865 android6.0SDK中删除HttpClient的相关类的解决方法 ...
- Android 6.0删除Apache HttpClient相关类的解决方法
相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...
- express 3.0.x 中默认不支持layout.ejs的解决方法
1.第一种方法用include 用<% include 模板名(可不加.ejs) %>的写法,具体如下 <% include header %> //套用布局拆成两部分 hea ...
- Android 6.0 SDK 找不到HttpClient的解决方法
一.情况描述 在eclipse或Android Studio开发时(笔者目前只用过Android Studio),设置Android SDK的编译版本为23时,且使用了httpClient相关类的库项 ...
- Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
SurfaceView, GLSurfaceView, SurfaceTexture以及TextureView是Android当中名字比较绕,关系又比较密切的几个类.本文基于Android 5.0(L ...
- linux中删除文件内空白行的几种方法。
linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- ASP.NET MVC中对Model进行分步验证的解决方法
原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...
- DirectX SDK (June 2010)安装错误S1023的一个解决方法
在安装DXSDK_Jun10.exe时一个常见的安装失败的代号是S1023,一般出现这种错误的原因是系统中已经安装了Visual Studio 2010及以上的版本. 在[控制面板]中找到这两个: 如 ...
随机推荐
- 第2章 面向对象的设计原则(SOLID):3_依赖倒置原则(DIP)
3. 依赖倒置原则(Dependence Inversion Principle,DIP) 3.1 定义 (1)要依赖抽象,不要依赖具体的实现类.简单的说就是对抽象(或接口)进行编程,不要依赖实现进行 ...
- IO流的练习2 —— 复制单级文件夹中的文件
需求:把C:\Users\Administrator\Desktop\记录\测试里面的所有文件复制到 C:\Users\Administrator\Desktop\新建文件夹\copy文件夹中 分析: ...
- java11-1 最常见的类 String类
字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. 通过查看API,可以知道 A:字符串字面值"abc"也可以看成是一个字符串对象. B:字符串是常量,一旦被赋值,就 ...
- C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
C#中的空值的判断较麻烦,不象在VB6中那么简单,这些各种空值的判断和理解对不熟悉的人来说,可能很麻烦,现就我在使用过程中的一点体会和大家共同分享. (1)NULL null 关键字是表示不引用任何对 ...
- 报错"the geometry has no Z values"处理
); //将Z值设置为0 //IPoint point = (IPoint)pGeo; //point.Z = 0; } else { IZAwa ...
- [原创]gerrit上分支操作记录(创建分支、删除分支)
Git分支对于一个项目的代码管理而言,是十分重要的! 许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉. 在此,我将自己的一些操作经历做一梳理,希望能帮助到 ...
- 【转】WCF与Web API 区别(应用场景)
Web api 主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作 请求的回 ...
- 导航程序调试1---MFC应用以及数据显示程序
问题 error C2664: "BuildCommDCBW": 不能将参数 1 从"char *"转换为"LPCWSTR"经常出现这样的错 ...
- cannot change version web module 3.0
eclipse如何修改dynamic web module version 由于从SVN down下来的工程java及tomcat 版本比本地高,导致工程不能编译,报以下错误. 1.Java comp ...
- eclipse使用
Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台. Eclipse 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++ ...