我试图将IntelliJ项目转换为Android Studio的Gradle系统,但我遇到了Apache HttpClient错误?我是否遗漏了一些东西,我得到的错误如下:

Error:(10, 30) error: package org.apache.http.client does not exist
Error:(11, 30) error: package org.apache.http.client does not exist
Error:(12, 37) error: package org.apache.http.client.entity does not exist
Error:(13, 38) error: package org.apache.http.client.methods does not exist
Error:(14, 38) error: package org.apache.http.client.methods does not exist
Error:(15, 38) error: package org.apache.http.client.methods does not exist
Error:(16, 35) error: package org.apache.http.impl.client does not exist
Error:(134, 33) error: cannot find symbol class HttpUriRequest
Error:(164, 39) error: cannot find symbol class HttpUriRequest
Error:(106, 17) error: cannot find symbol class HttpGet
Error:(106, 39) error: cannot find symbol class HttpGet
Error:(117, 17) error: cannot find symbol class HttpPost
Error:(117, 40) error: cannot find symbol class HttpPost
Error:(125, 43) error: cannot find symbol class UrlEncodedFormEntity
Error:(135, 9) error: cannot find symbol class HttpClient
Error:(135, 33) error: cannot find symbol class DefaultHttpClient
Error:(155, 18) error: cannot find symbol class ClientProtocolException
Error:(165, 9) error: cannot find symbol class HttpClient
Error:(165, 33) error: cannot find symbol class DefaultHttpClient
Error:(185, 18) error: cannot find symbol class ClientProtocolException

我的建立。Gradle文件有以下依赖项:

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile 'org.apache.httpcomponents:httpclient:4.2.6'
    compile 'org.apache.httpcomponents:httpmime:4.2.6'
    compile files('libs/core.jar')
}

似乎很多人都遇到了类似的问题,但SO和谷歌都没有解决方案,所以我希望这个问题能帮助未来的搜索者。


当前回答

我建议你用新的HttpURLConnection替换已弃用的apache HttpClient。

这是一个更干净的解决方案,很容易迁移,通常最好坚持最新的SDK更改,而不是试图破解/修补/变通:你通常会后悔:)

步骤1

HttpGet httpGet = new HttpGet(url);

就变成:

URL urlObj = new URL(url);

步骤2

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();

就变成:

HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();

一步两步

int status = response.getStatusLine().getStatusCode();

就变成:

int status = urlConnection.getResponseCode();

其他回答

我也遇到了同样的问题。Daniel Nugent的回答帮了一点忙(在遵循他的建议之后找到了HttpResponse -但HttpClient仍然缺失)。

这就是我解决问题的方法:

(如果还没有完成,推荐之前的import-statements) 访问http://hc.apache.org/downloads.cgi 从二进制部分获取4.5.1.zip 解压并将httpcore-4.4.3 & httpclient-4.5.1.jar粘贴到project/libs文件夹中 右键单击jar并选择Add as library。

希望能有所帮助。

基本上你所需要做的就是添加:

useLibrary  'org.apache.http.legacy'

适合你的身材。gradle文件。

我克隆了以下内容:https://github.com/google/play-licensing

然后我把它导入到我的项目中。

我遇到过类似的问题,你可以用类似的方法让它工作。

首先,在你当前的配置中尝试一下,从httpmime中排除httpclient:

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile ('org.apache.httpcomponents:httpmime:4.2.6'){
            exclude module: 'httpclient'
        }
    compile 'org.apache.httpcomponents:httpclient:4.2.6'
} 

在我的情况下,我通过使用以下罐子来修复它:

httpclient-android-4.3.5.1.jar httpmime-4.3.5.jar

然后,在构建中。Gradle,排除httpclient从httpmime:

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile('org.apache.httpcomponents:httpmime:4.3.5') {
        exclude module: 'httpclient'
    }
    compile 'org.apache.httpcomponents:httpclient-android:4.3.5.1'
}

我建议你用新的HttpURLConnection替换已弃用的apache HttpClient。

这是一个更干净的解决方案,很容易迁移,通常最好坚持最新的SDK更改,而不是试图破解/修补/变通:你通常会后悔:)

步骤1

HttpGet httpGet = new HttpGet(url);

就变成:

URL urlObj = new URL(url);

步骤2

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();

就变成:

HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();

一步两步

int status = response.getStatusLine().getStatusCode();

就变成:

int status = urlConnection.getResponseCode();