题 Android M开发人员预览中的Volley:org.apache.http无法解析


我在Android M开发者预览版中测试Volley的HurlStack。

我改变之后 compileSdkVersion 从 22 至 'android-MNC',org.apache.http中的所有类都没有编译:

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.StatusLine;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicStatusLine;

如何修改我的代码来解决这个问题?

我知道有一些与Apache HTTP客户端相关的更改,但是当我按照要添加的步骤时仍然无法正常工作 useLibrary 'org.apache.http.legacy' 在gradle。

参考: HurlStack.java AOSP

行为更改:Apache HTTP客户端删除


12
2017-07-10 21:48


起源


Apache HttpClient已被弃用了一段时间。 Volley在旧版本的Android上使用HttpClient,在新版本上使用URLConnection。很可能他们已经从M预览中删除了httpclient。将android的最低版本设置为Volley使用URLConnection的级别时,不应发生此错误。 - Christine
或者您可以自己包含httpClient。喜欢这里: code.google.com/p/httpclientandroidlib - Christine
@Christine谢谢你的回答。从 developer.android.com/preview/setup-sdk.html 在“更新现有项目”部分,Google建议将minSdkVersion设置为“MNC”。我想知道是否有一种正式的方法来绕过这一点。 - Song
Volley作为源项目在您的IDE中。您可以在那里删除对httpclient的调用。代码位于Volley.java中的“newRequestQueue()”中 - Christine
看起来应用程序可以在Developer Preview 2上运行。我添加了useLibrary'org.apache.http.legacy'并将gradle版本更改为1.3.0-beta4。 IDE仍然无法解析库。希望这可以帮助。 - Song


答案:


官方的“行为改变”文件 状态 Android M中删除了Apache HTTP客户端 - 不推荐使用,但是 去除。我个人强烈建议切换到 OkHttp 实际上用作一个 HttpURLConnection 从KitKat开始,通过使用依赖项,你可以直接获得Square团队的所有新鲜东西。


4
2017-08-04 21:27





您可以忽略这些警告,因为Volley仍然使用API​​ 22编译: https://github.com/mcxiaoke/android-volley/blob/master/gradle.properties

在proguard配置中添加这些: -dontwarn org.apache.http。** -dontwarn com.android.volley.toolbox。**


1
2017-10-04 09:37





除了使用okHttp之外,后备是使用Google建议的传统apache httpclient。 请在此处查看我的答案以使其正常运行

如何在Android Marshmallow上使用传统的Apache HTTP客户端?


0
2017-08-05 06:49





如果像我一样,你包括HttpClient的唯一原因是你正在测试HTTP响应代码:

if (error.networkResponse.statusCode == HttpStatus.SC_UNAUTHORIZED) {}

然后一个简单的修复只是使用HttpURLConnection类中的常量版本:

if (error.networkResponse.statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {}

0
2017-11-20 17:00



但请注意,并非所有Http状态代码都存在于HttpURLConnection类中。例如,307不再存在临时重定向。 - Mike