HttpClient n'importe pas sur Android Studio

j'ai une classe simple écrite dans Android Studio:

package com.mysite.myapp;

import org.apache.http.client.HttpClient;

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

et j'obtient l'erreur de compilation:

Cannot resolve symbol HttpClient

n'est-ce pas HttpClient inclus dans le SDK Android Studio? Même si ce n'est pas le cas, je l'ai ajouté à ma construction Gradle comme ceci:

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

Avec ou sans la dernière ligne de compilation, l'erreur est la même. Ce qui me manque?

310
demandé sur Eric Leschinski 2015-08-22 09:56:51

22 réponses

HttpClient n'est plus supporté dans le sdk 23. Vous devez utiliser URLConnection ou downgrade en sdk 22 ( compile 'com.android.support:appcompat-v7:22.2.0' )

si vous avez besoin de sdk 23, ajoutez ceci à votre Grad:

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

vous pouvez également essayer de télécharger et d'inclure HttpClient jar directement dans votre projet ou utiliser OkHttp à la place

728
répondu Ilya Blokh 2017-07-07 09:39:01

HttpClient a été déprécié au niveau 22 de L'API et supprimé au niveau 23 de l'API. Vous pouvez toujours l'utiliser dans le niveau 23 de L'API et au-delà si vous le devez, cependant il est préférable de passer aux méthodes supportées pour gérer HTTP. Donc, si vous compilez avec 23, ajoutez ceci dans votre Compilation.gradle:

android {
    useLibrary 'org.apache.http.legacy'
}
147
répondu straya 2015-08-22 14:52:22

la réponse de TejaDroid dans le lien ci-dessous m'a aidé . ne peut pas importer 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'
    ...
}
53
répondu Vinay 2017-05-23 10:31:37

pour utiliser Apache HTTP pour le niveau SDK 23:

Haut niveau de construction.gradle - /build.Grad

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/
    }
    ...
}

Notification de Android studio à propos de gradle update:

Notification from Android studio about gradle update

Module de build spécifique.Grad - / app / build.Grad

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}
47
répondu AndreyICE 2016-01-11 10:54:52

essayez ceci a fonctionné pour moi Ajoutez cette dépendance à votre construction.dossier gradle

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
29
répondu Pritish Joshi 2016-03-03 09:01:25

1 - Télécharger les fichiers Apache jar (à partir de cette réponse) 4.5.fichier zip à partir de:

https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2-Ouvrez la copie zip des fichiers jar dans votre dossier libs. Vous pouvez le trouver si vous allez au sommet de votre projet où il est dit "Android", vous trouverez une liste lorsque vous cliquez sur elle. Donc,

Android - > projet - > app -> libs

, puis y mettre des pots.

3 - Dans la construction.Grad le (Module: app) Ajouter

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

dans

 dependency { 
   }

4-dans la classe java ajouter ces importations:

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;
15
répondu fullMoon 2018-03-22 19:23:12

HttpClient n'est plus supporté dans le sdk 23. Android 6.0 (API niveau 23) supprime la prise en charge du client HTTP Apache. Vous devez utiliser

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

et ajouter aussi ci-dessous un extrait de code dans votre dépendance:

//http solution finale pour le web-service (y compris transfert de fichier)

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

il vous aidera aussi pendant que vous utilisez L'utilisation Multipartitentity pour fichier télécharger .

14
répondu android_sh 2016-02-18 08:03:02

dans API 22 ils deviennent obsolètes et dans API 23 Ils les suppriment complètement, une solution simple si vous n'avez pas besoin de toutes les choses de fantaisie des nouveaux ajouts est d'utiliser simplement le .les fichiers jar d'apache qui ont été intégrés avant L'API 22, mais séparés .fichiers 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
6
répondu Catalin 2015-09-17 17:34:30

vous pouvez simplement ajouter ceci aux dépendances de Gradle:

compile "org.apache.httpcomponents:httpcore:4.3.2"
6
répondu Mostafa Abdellateef 2015-09-28 12:38:40

Android 6.0 (API Level 23) release supprime la prise en charge du client HTTP Apache. Vous ne pouvez donc pas utiliser cette bibliothèque directement dans API 23. Mais il y a un moyen de l'utiliser. Ajouter uselibrary ' org.Apache.http.héritage " dans votre construction.comme ci - dessous -

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

si cela ne fonctionne pas, vous pouvez appliquer le hack suivant -

– Copie org.Apache.http.héritage.jar qui est dans / plates-formes / android-23 / chemin optionnel de votre répertoire sdk Android à votre dossier app/libs du projet.

- maintenant ajouter compiler des fichiers ('libs / org.Apache.http.héritage.jar’) dans la section dépendances{} de build.dossier gradle.

6
répondu user3766643 2015-12-24 02:40:53

ApacheHttp Client est supprimé dans v23 sdk. Vous pouvez utiliser HttpURLConnection ou un Client Http tiers comme OkHttp.

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

5
répondu Kirtan 2015-08-22 07:18:41

HttpClient n'est pas supporté dans les sdk 23 et 23+.

si vous devez utiliser dans sdk 23, ajoutez le code ci-dessous à votre Grad:

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

ça marche pour moi. Espérons utile pour vous.

5
répondu Sneha Patel 2016-07-11 10:05:36

si vous avez besoin de sdk 23, ajoutez ceci à votre Grad:

android {
    useLibrary 'org.apache.http.legacy'
}
5
répondu ShivBuyya 2016-07-12 06:56:19

utilisez simplement ceci: -

android {
         .
         .
         .
 useLibrary 'org.apache.http.legacy'
         .
         .
         .
          }
4
répondu Kaushal Kishor 2015-12-29 12:49:48

vous devez ajouter une seule ligne

useLibrary 'org.apache.http.legacy'

dans build.gradle (Module: app), par exemple

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'
}
4
répondu Nilesh Panchal 2016-12-03 11:17:51

quelle cible API avez-vous dans votre projet? AndroidHttpClient est uniquement pour les API de Niveau 8 <. et s'il vous plaît jeter un oeil sur ici

profitez de votre code:)

3
répondu John smith 2015-08-22 07:14:49

ajouter ces deux lignes sous dépendances

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

puis

useLibrary 'org.apache.http.legacy'

sous l'androïde

3
répondu Ramindu Rusara Senarath 2016-11-19 05:35:52

une autre façon est si vous avez httpclient.jar fichier alors vous pouvez faire ceci:

collez votre .fichier jar dans le "dossier libs" de votre projet. Puis dans gradle ajouter cette ligne dans votre construction.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')
}
2
répondu Pre_hacker 2015-12-07 09:25:08

comme mentionné ci-dessus, org.apache.http.client.HttpClient n'est plus supporté dans:

SDK (niveau API) #23.

vous devez utiliser java.net.HttpURLConnection .

si vous voulez rendre votre code (et la vie) plus facile en utilisant HttpURLConnection , voici un Wrapper de cette classe qui vous permettra de faire des opérations simples avec GET , POST et PUT en utilisant JSON , comme par exemple, faire un 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()

N'hésitez pas à l'utiliser.

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;
    }

}
2
répondu Alejandro Pablo Tkachuk 2017-06-08 17:30:24

erreur: (30, 0) méthode Gradle DSL introuvable: 'classpath ()' Causes possibles:

  • le projet " cid "peut utiliser une version du plug-in Android Grad qui ne contient pas la méthode (par exemple "testCompile" a été ajouté dans 1.1.0). Mise à niveau de plugin pour la version 2.3.3 et de synchronisation du projet
  • Le projet 'cid' peut-être une version de Gradle qui ne contient pas la méthode. Ouvrir le fichier Gradle wrapper
  • le fichier de construction peut manquer un Gradle plugin. Appliquer plugin Gradle
  • 0
    répondu Eshan Chattaraj 2017-08-30 06:11:40

    Si vous voulez importer une classe comme :

    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;
    

    Vous pouvez ajouter la ligne suivante dans la construction.Grad (Grad dependencies)

    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'
    
    }
    
    0
    répondu A.Bahrami 2018-09-29 17:12:42

    je pense que selon la version Android Studio que vous avez, il est important que vous mettez à jour votre studio android ainsi, je devenais frustré aussi en suivant les conseils de tout le monde, mais pas de chance, jusqu'à ce que j'ai dû mettre à jour ma version android de 1.3 à 1.5, les erreurs ont disparu comme par magie.

    -1
    répondu steven89806 2016-03-14 08:57:20