HttpClient不会在Android Studio中导入

时间:2015-08-22 06:56:51

标签: android gradle android-gradle apache-httpclient-4.x

我有一个用Android Studio编写的简单类:

package com.mysite.myapp;

import org.apache.http.client.HttpClient;

public class Whatever {
    public void headBangingAgainstTheWallExample () {
        HttpClient client = new DefaultHttpClient();
    }
}

从此我得到以下编译时错误:

Cannot resolve symbol HttpClient

Android Studio SDK中是否包含HttpClient?即使不是,我也将它添加到我的Gradle构建中:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'org.apache.httpcomponents:httpclient:4.5'
}

有或没有最后一个编译行,错误是相同的。我错过了什么?

24 个答案:

答案 0 :(得分:778)

在sdk 23中不再支持

HttpClient。您必须使用URLConnection或降级到sdk 22(compile 'com.android.support:appcompat-v7:22.2.0'

如果您需要sdk 23,请将其添加到您的gradle:

android {
    useLibrary 'org.apache.http.legacy'
}

您也可以尝试直接下载HttpClient jar并将OkHttp包含在您的项目中,或使用{{3}}代替

答案 1 :(得分:153)

HttpClient在API级别22中已弃用,已在API级别23中删除。如果必须,您仍可在API级别23及更高版本中使用它,但最好转移到支持的方法来处理HTTP。因此,如果您使用23进行编译,请在build.gradle中添加:

android {
    useLibrary 'org.apache.http.legacy'
}

答案 2 :(得分:55)

TejaDroid在以下链接中的回答对我有所帮助。 Can't import org.apache.http.HttpResponse in Android Studio

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.0.1'

    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    ...
}

答案 3 :(得分:47)

使用Apache HTTP for SDK Level 23:

顶级build.gradle - /build.gradle

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0' 
        // Lowest version for useLibrary is 1.3.0
        // Android Studio will notify you about the latest stable version
        // See all versions: http://jcenter.bintray.com/com/android/tools/build/gradle/
    }
    ...
}

来自Android工作室的关于gradle更新的通知:

Notification from Android studio about gradle update

特定于模块的build.gradle - /app/build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}

答案 4 :(得分:30)

试试这个 为我工作 将此依赖项添加到build.gradle文件

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

答案 5 :(得分:16)

1-下载Apache jar文件(截至此答案)4.5.zip文件来自: https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2-打开zip文件将jar文件复制到libs文件夹中。你可以找到它,如果你到项目的顶部说它" Android"当你点击它时,你会找到一个列表。所以,

  

Android - >项目 - > app - >库

,然后将罐子放在那里。

3-在build.gradle(Module:app)中添加

compile fileTree(dir: 'libs', include: ['*.jar'])

 dependency { 
   }

4-在java类中添加这些导入:

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.params.CoreProtocolPNames;

答案 6 :(得分:14)

在sdk 23中不再支持HttpClient.Android 6.0(API Level 23)版本删除了对Apache HTTP客户端的支持。 你必须使用

android {
    useLibrary 'org.apache.http.legacy'
    .
    .
    .

并在依赖项中添加以下代码段:

//用于网络服务的http最终解决方案(包括文件上传)

compile('org.apache.httpcomponents:httpmime:4.3.6') {
        exclude module: 'httpclient'
}
 compile 'org.apache.httpcomponents:httpclient-android:4.3.5'

使用 MultipartEntity 进行文件上传时,它也会对您有所帮助。

答案 7 :(得分:7)

在API 22中它们被弃用了,在API 23中它们完全删除了它们,一个简单的解决方法如果你不需要新添加的所有花哨的东西就是简单地使用apache之前集成的.jar文件22,但作为分隔的.jar文件:

1. http://hc.apache.org/downloads.cgi
2. download httpclient 4.5.1, the zile file
3. unzip all files
4. drag in your project httpclient-4.5.1.jar, httpcore-4.4.3.jar and httpmime-4.5.1.jar
5. project, right click, open module settings, app, dependencies, +, File dependency and add the 3 files
6. now everything should compile properly

答案 8 :(得分:6)

如果您要导入类似的类:

import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

您可以在build.gradle(Gradle依赖项)中添加以下行

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:support-v4:27.1.0'

    .
    .
    .

    implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

}

答案 9 :(得分:6)

Android 6.0(API Level 23)版本删除了对Apache HTTP客户端的支持。因此,您不能直接在API 23中使用此库。但有一种方法可以使用它。在build.gradle文件中添加useLibrary'org.apache.http.legacy',如下所示 -

android {
    useLibrary 'org.apache.http.legacy'
}

如果这不起作用,您可以应用以下黑客 -

- 复制org.apache.http.legacy.jar,它位于/ SDK / android-23 / Android SDK目录的可选路径中,位于项目的app / libs文件夹中。

- 现在在build.gradle文件的dependencies {}部分中添加编译文件('libs / org.apache.http.legacy.jar')。

答案 10 :(得分:6)

您只需将其添加到Gradle依赖项:

compile "org.apache.httpcomponents:httpcore:4.3.2"

答案 11 :(得分:5)

在v23 sdk中删除了ApacheHttp客户端。您可以使用HttpURLConnection或第三方Http Client,如OkHttp。

参考:https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client

答案 12 :(得分:5)

sdk 23和23 +不支持HttpClient。

如果您需要使用sdk 23,请将以下代码添加到您的gradle:

android {
    useLibrary 'org.apache.http.legacy'
}

它为我工作。希望对你有用。

答案 13 :(得分:5)

如果您需要sdk 23,请将其添加到您的gradle:

android {
    useLibrary 'org.apache.http.legacy'
}

答案 14 :(得分:4)

只需使用: -

android {
         .
         .
         .
 useLibrary 'org.apache.http.legacy'
         .
         .
         .
          }

答案 15 :(得分:4)

您只需添加一行

useLibrary 'org.apache.http.legacy'

到build.gradle(Module:app),例如

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"

    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        applicationId "com.avenues.lib.testotpappnew"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}

答案 16 :(得分:3)

您的项目中有哪个API目标?AndroidHttpClient仅适用于API级别8<。 请查看here

享受您的代码:)

答案 17 :(得分:3)

如前所述,我们不再支持org.apache.http.client.HttpClient

SDK(API级别)#23。

您必须使用java.net.HttpURLConnection

如果您想在使用HttpURLConnection时更轻松地使代码(和生活)变得更简单,这个类的Wrapper将允许您使用GET进行简单的操作,{{ 1}}和POST使用PUT,例如,执行JSON

HTTP PUT

随意使用它。

HttpRequest request = new HttpRequest(API_URL + PATH).addHeader("Content-Type", "application/json");
int httpCode = request.put(new JSONObject().toString());
if (HttpURLConnection.HTTP_OK == httpCode) {
    response = request.getJSONObjectResponse();
} else {
  // log error
}
httpRequest.close()

答案 18 :(得分:2)

在依赖项下添加这两行

compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'

然后

useLibrary 'org.apache.http.legacy'

下的android

答案 19 :(得分:2)

  

另一种方法是,如果您有 httpclient.jar 文件,那么您可以这样做   这个:

将.jar文件粘贴到" libs文件夹"在你的项目中。然后在gradle中将此行添加到build.gradle(Module:app)

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.0.0'
compile files('libs/httpcore-4.3.3.jar')
}

答案 20 :(得分:1)

自 2021 年 4 月起,您可以使用以下内容:

在您的应用程序 gradle 中,在“dependencies {”下添加以下内容:

implementation 'org.apache.httpcomponents:httpcore:4.4.10'
implementation 'org.apache.httpcomponents:httpclient:4.5.6'

在您的 Java 活动中,添加以下导入:

import org.apache.http.client.HttpClient;

然后您应该能够将 HttpClient 添加到您的方法中。

答案 21 :(得分:0)

错误:(30,0)未找到Gradle DSL方法:' classpath()' 可能的原因:

  • 项目' cid'可能正在使用不包含该方法的Android Gradle插件版本(例如,在1.1.0中添加了' testCompile')。 将插件升级到版本2.3.3并同步项目
  • 项目' cid'可能正在使用不包含该方法的Gradle版本。 打开Gradle包装器文件
  • 构建文件可能缺少Gradle插件。 申请Gradle插件
  • 答案 22 :(得分:0)

    对于android API 28及更高版本 在Manifest.xml中的应用程序标记内

        <application
        .
        .
        .
    
        <uses-library android:name="org.apache.http.legacy" android:required="false"/>
    

    答案 23 :(得分:-1)

    我认为根据你拥有的Android Studio版本,重要的是你更新你的android工作室,我也很沮丧,遵循每个人的建议,但没有运气,直到我不得不将我的Android版本从1.3升级到1.5,错误像魔法一样消失了。