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?
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
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'
}
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'
...
}
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:
Module de build spécifique.Grad - / app / build.Grad
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
...
useLibrary 'org.apache.http.legacy'
...
}
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'
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;
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 .
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
vous pouvez simplement ajouter ceci aux dépendances de Gradle:
compile "org.apache.httpcomponents:httpcore:4.3.2"
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.
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
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.
si vous avez besoin de sdk 23, ajoutez ceci à votre Grad:
android {
useLibrary 'org.apache.http.legacy'
}
utilisez simplement ceci: -
android {
.
.
.
useLibrary 'org.apache.http.legacy'
.
.
.
}
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'
}
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:)
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
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')
}
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;
}
}
erreur: (30, 0) méthode Gradle DSL introuvable: 'classpath ()' Causes possibles:
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'
}
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.