web-dev-qa-db-fra.com

HttpClient n'importera pas dans Android Studio

J'ai un cours simple écrit en Android Studio:

package com.mysite.myapp;

import org.Apache.http.client.HttpClient;

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

et à partir de cela, j'obtiens l'erreur de compilation suivante:

Cannot resolve symbol HttpClient

HttpClient n'est-il pas inclus dans le Android Studio SDK? Même si ce n'est pas le cas, je l'ai ajouté à ma version de 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. Qu'est-ce que je rate?

342
Alex

HttpClient n'est plus pris en charge dans sdk 23. Vous devez utiliser URLConnection ou rétrograder vers sdk 22 (compile 'com.Android.support:appcompat-v7:22.2.0')

Si vous avez besoin de sdk 23, ajoutez ceci à votre diplôme:

Android {
    useLibrary 'org.Apache.http.legacy'
}

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

784
Ilya Blokh

HttpClient était obsolète dans l'API de niveau 22 et supprimé dans l'API de niveau 23. Vous pouvez toujours l'utiliser à partir de l'API de niveau 23 ou ultérieur, mais il est préférable de passer aux méthodes prises en charge pour gérer HTTP. Donc, si vous compilez avec 23, ajoutez ceci dans votre build.gradle:

Android {
    useLibrary 'org.Apache.http.legacy'
}
154
straya

La réponse de TejaDroid dans le lien ci-dessous m'a aidé. Impossible d'importer org.Apache.http.HttpResponse dans 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'
    ...
}
56
Vinay

Pour utiliser Apache HTTP for SDK Level 23:

build.gradle de niveau supérieur - /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/
    }
    ...
}

Notification de Android studio à propos de la mise à jour de Gradle:

Notification from Android studio about gradle update

build.gradle spécifique au module - /app/build.gradle

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    ...
    useLibrary 'org.Apache.http.legacy'
    ...
}
47
AndreyICE

Essayez ceci a fonctionné pour moi Ajoutez cette dépendance à votre fichier build.gradle

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
30
Pritish Joshi

1- Téléchargez les fichiers jar Apache (à partir de cette réponse) 4.5.Zip file from:
https://hc.Apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2- ouvrez le fichier Zip, copiez les fichiers jar dans votre dossier libs. Vous pouvez le trouver si vous allez en haut de votre projet, où il est écrit "Android", vous trouverez une liste lorsque vous cliquez dessus. Alors,

Android -> Projet -> app -> libs

, Puis mettez les pots là-bas.

3- Dans build.gradle (Module: app), ajoutez

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

dans

 dependency { 
   }

4- Dans la classe Java ajoutez 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;
16
fullMoon

HttpClient n'est plus pris en charge dans sdk 23. La version de Android 6.0 (API de niveau 23) supprime la prise en charge du client HTTP Apache. Vous devez utiliser

Android {
    useLibrary 'org.Apache.http.legacy'
    .
    .
    .

et ajoutez également l'extrait de code ci-dessous dans votre dépendance:

// solution finale http pour le service Web (y compris le téléchargement de fichiers)

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

Il vous aidera également à utiliser Utiliser MultipartEntity pour Téléchargement de fichier.

14
android_sh

dans l’API 22, ils deviennent obsolètes et dans l’API 23, ils les suppriment complètement. Une solution de contournement simple si vous n’avez pas besoin de toutes les fonctionnalités sophistiquées des nouveaux ajouts consiste simplement à utiliser les fichiers .jar d’Apache intégrés à l’API 22, mais sous forme de fichiers .jar séparés:

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
7
Catalin

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 le build.gradle (dépendances 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'

}
6
A.Bahrami

Vous pouvez simplement ajouter ceci aux dépendances Gradle:

compile "org.Apache.httpcomponents:httpcore:4.3.2"
6
Mostafa Abdellateef

La version Android 6.0 (API niveau 23) supprime la prise en charge du client HTTP Apache. Par conséquent, vous ne pouvez pas utiliser cette bibliothèque directement dans l'API 23. Mais il existe un moyen de l'utiliser. Ajoutez useLibrary ‘org.Apache.http.legacy’ dans votre fichier build.gradle comme suit:

Android {
    useLibrary 'org.Apache.http.legacy'
}

Si cela ne fonctionne pas, vous pouvez appliquer le hack-

- Copiez le fichier org.Apache.http.legacy.jar qui se trouve dans/plateformes/Android-23/chemin facultatif de votre répertoire Android SDK dans le dossier app/libs de votre projet.

- Ajoutez maintenant des fichiers de compilation (‘libs/org.Apache.http.legacy.jar’) dans la section dependencies {} du fichier build.gradle.

6
user3766643

Le client ApacheHttp est supprimé dans le kit de développement v23. Vous pouvez utiliser HttpURLConnection ou un client HTTP tiers comme OkHttp.

ref: https://developer.Android.com/preview/behavior-changes.html#behavior-Apache-http-client

5
Kirtan

Si vous avez besoin de sdk 23, ajoutez ceci à votre diplôme:

Android {
    useLibrary 'org.Apache.http.legacy'
}
4
ShivBuyya

Utilisez simplement ceci: -

Android {
         .
         .
         .
 useLibrary 'org.Apache.http.legacy'
         .
         .
         .
          }
4
Kaushal Kishor

HttpClient n'est pas pris en charge par SDK 23 et 23+.

Si vous avez besoin d’utiliser dans sdk 23, ajoutez le code ci-dessous à votre titre:

Android {
    useLibrary 'org.Apache.http.legacy'
}

Cela fonctionne pour moi. Espoir utile pour vous.

4
Sneha Patel

Vous devez ajouter juste une 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
Nilesh Panchal

Comme mentionné précédemment, org.Apache.http.client.HttpClient n'est plus pris en charge dans:

SDK (niveau API) # 23.

Vous devez utiliser Java.net.HttpURLConnection.

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

Sentez-vous libre de 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;
    }

}

Quelle cible d’API avez-vous dans votre projet? AndroidHttpClientest réservé à l’API de niveau 8 <. et s'il vous plaît jeter un oeil sur ici

profitez de votre code :)

3
John smith

Ajouter ces deux lignes sous dépendances

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

ensuite

useLibrary 'org.Apache.http.legacy'

sous l'Android

Une autre façon est que si vous avez le fichier httpclient.jar, vous pouvez le faire:

Collez votre fichier .jar dans le "dossier libs" de votre projet. Ensuite, ajoutez cette ligne dans votre 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')
}
1
Pre_hacker

Erreur: (30, 0) Méthode DSL Gradle introuvable: 'classpath ()' Causes possibles:

  • Le projet 'cid' utilise peut-être une version du plug-in Android Gradle qui ne contient pas la méthode (par exemple, 'testCompile' a été ajouté dans la version 1.1.0). Mise à niveau du plug-in vers la version 2.3.3 et du projet de synchronisation
  • Le projet 'cid' utilise peut-être une version de Gradle qui ne contient pas la méthode. Ouvrir le fichier wrapper Gradle
  • Il manque peut-être un plugin Gradle au fichier de construction. Appliquer le plugin Gradle
  • 0
    Eshan Chattaraj