HttpClient不能在Android Studio中导入

我有一个简单的类写在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

HttpClient不是包含在Android Studio SDK中吗?即使不是,我也像这样把它添加到我的Gradle构建中:

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

不管有没有最后一个编译行,错误都是一样的。我错过了什么?

615465 次浏览

在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代替

你的项目中有哪个API目标?__abc0只适用于API级别8 < 请查看在这里

享受你的代码:)

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

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

HttpClient在API Level 22中已弃用,并在API Level 23中被移除。如果你必须,你仍然可以在API级别23及以上使用它,但是最好转移到受支持的方法来处理HTTP。所以,如果你用23编译,在build.gradle中添加这个:

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

1-下载Apache jar文件(作为这个答案)4.5.zip文件从 https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F < / p >

2-打开zip复制jar文件到你的libs文件夹。你可以在你的项目顶部找到它,上面写着“Android”,当你点击它的时候,你会发现一个列表。所以,

Android ->项目->应用程序-> libs

,然后把罐子放在那里。

3-建造中。gradle(模块: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;

在SDK级别23中使用Apache HTTP:

顶层构建。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

特定于模块的构建。Gradle - /app/build.gradle

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

在API 22中,它们被弃用了,在API 23中,它们被完全删除了,如果你不需要新添加的所有花哨的东西,一个简单的解决方法是简单地使用API 22之前集成的apache的。jar文件,但作为独立的。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

你可以简单地将它添加到Gradle依赖项中:

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

TejaDroid的答案在下面的链接中帮助了我。不能在Android Studio中导入org.apache.http.HttpResponse

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'
...
}
另一种方法是如果你有httpclient.jar文件,那么你可以这样做 : < / p >

将.jar文件粘贴到项目的“libs文件夹”中。然后在gradle中添加这一行到build.gradle(模块: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')
}
< p >试试这个 为我工作 将此依赖项添加到构建中。gradle文件< / p >
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

Android 6.0 (API Level 23)版本删除了对Apache HTTP客户端的支持。因此你不能在API 23中直接使用这个库。但还是有办法利用它的。添加useLibrary ` org.apache.http。在你的构建中遗留'。Gradle文件如下-

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

如果这没有工作,你可以应用以下黑客-

将Android SDK目录/platforms/ Android -23/optional路径下的org.apache.http.legacy.jar复制到项目的app/libs文件夹。

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

简单地使用这个:-

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

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

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

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

//http web服务的最终解决方案(包括文件上传)

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

当你为文件上传使用MultipartEntity时,它也会帮助你。

我认为这取决于你的Android Studio版本,重要的是你更新你的Android Studio,我也变得沮丧,遵循每个人的建议,但没有运气,直到我不得不将我的Android版本从1.3升级到1.5,错误就像魔术一样消失了。

HttpClient在sdk 23和23+中不支持。

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

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

这对我很有用。希望对你有用。

如果你需要sdk 23,把这个添加到你的gradle:

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

在依赖项下添加这两行

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

然后

useLibrary 'org.apache.http.legacy'

在安卓系统下

你只需要加一行

useLibrary 'org.apache.http.legacy'

为构建。例如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'
}

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

SDK (API级别)#23。

你必须使用java.net.HttpURLConnection

如果你想在使用HttpURLConnection时让你的代码(和生活)更简单,这里是该类的Wrapper,它可以让你使用JSONGETPOSTPUT进行简单操作,例如,执行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()

请随意使用。

package com.calculistik.repository;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;


import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


/**
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
* <p>
* Copyright © 2017, Calculistik . All rights reserved.
* <p>
* Oracle and Java are registered trademarks of Oracle and/or its
* affiliates. Other names may be trademarks of their respective owners.
* <p>
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common
* Development and Distribution License("CDDL") (collectively, the
* "License"). You may not use this file except in compliance with the
* License. You can obtain a copy of the License at
* https://netbeans.org/cddl-gplv2.html or
* nbbuild/licenses/CDDL-GPL-2-CP. See the License for the specific
* language governing permissions and limitations under the License.
* When distributing the software, include this License Header
* Notice in each file and include the License file at
* nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this particular file
* as subject to the "Classpath" exception as provided by Oracle in the
* GPL Version 2 section of the License file that accompanied this code. If
* applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* <p>
* Contributor(s):
* Created by alejandro tkachuk @aletkachuk
* www.calculistik.com
*/
public class HttpRequest {


public static enum Method {
POST, PUT, DELETE, GET;
}


private URL url;
private HttpURLConnection connection;
private OutputStream outputStream;
private HashMap<String, String> params = new HashMap<String, String>();


public HttpRequest(String url) throws IOException {
this.url = new URL(url);
connection = (HttpURLConnection) this.url.openConnection();
}


public int get() throws IOException {
return this.send();
}


public int post(String data) throws IOException {
connection.setDoInput(true);
connection.setRequestMethod(Method.POST.toString());
connection.setDoOutput(true);
outputStream = connection.getOutputStream();
this.sendData(data);
return this.send();
}


public int post() throws IOException {
connection.setDoInput(true);
connection.setRequestMethod(Method.POST.toString());
connection.setDoOutput(true);
outputStream = connection.getOutputStream();
return this.send();
}


public int put(String data) throws IOException {
connection.setDoInput(true);
connection.setRequestMethod(Method.PUT.toString());
connection.setDoOutput(true);
outputStream = connection.getOutputStream();
this.sendData(data);
return this.send();
}


public int put() throws IOException {
connection.setDoInput(true);
connection.setRequestMethod(Method.PUT.toString());
connection.setDoOutput(true);
outputStream = connection.getOutputStream();
return this.send();
}


public HttpRequest addHeader(String key, String value) {
connection.setRequestProperty(key, value);
return this;
}


public HttpRequest addParameter(String key, String value) {
this.params.put(key, value);
return this;
}


public JSONObject getJSONObjectResponse() throws JSONException, IOException {
return new JSONObject(getStringResponse());
}


public JSONArray getJSONArrayResponse() throws JSONException, IOException {
return new JSONArray(getStringResponse());
}


public String getStringResponse() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
for (String line; (line = br.readLine()) != null; ) response.append(line + "\n");
return response.toString();
}


public byte[] getBytesResponse() throws IOException {
byte[] buffer = new byte[8192];
InputStream is = connection.getInputStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
for (int bytesRead; (bytesRead = is.read(buffer)) >= 0; )
output.write(buffer, 0, bytesRead);
return output.toByteArray();
}


public void close() {
if (null != connection)
connection.disconnect();
}


private int send() throws IOException {
int httpStatusCode = HttpURLConnection.HTTP_BAD_REQUEST;


if (!this.params.isEmpty()) {
this.sendData();
}
httpStatusCode = connection.getResponseCode();


return httpStatusCode;
}


private void sendData() throws IOException {
StringBuilder result = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
result.append((result.length() > 0 ? "&" : "") + entry.getKey() + "=" + entry.getValue());//appends: key=value (for first param) OR &key=value(second and more)
}
sendData(result.toString());
}


private HttpRequest sendData(String query) throws IOException {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
writer.write(query);
writer.close();
return this;
}


}

错误:(30,0)Gradle DSL方法未找到:'classpath()' 项目“cid”可能正在使用一个不包含该方法的Android Gradle插件版本(例如:'testCompile'在1.1.0中添加)。 将插件升级到2.3.3版本并同步项目

  • 项目'cid'可能正在使用不包含该方法的Gradle版本。 打开Gradle包装文件
  • 构建文件可能缺少一个Gradle插件。 应用Gradle插件
  • 如果你想导入一些类,比如:

    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;
    

    您可以在构建中添加以下行。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'
    
    
    }
    

    对于android API 28或更高 在Manifest.xml中应用程序标签

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

    自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添加到您的方法中。