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?
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.
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'
}
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'
...
}
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:
build.gradle spécifique au module - /app/build.gradle
Android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
...
useLibrary 'org.Apache.http.legacy'
...
}
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'
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;
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.
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
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'
}
Vous pouvez simplement ajouter ceci aux dépendances Gradle:
compile "org.Apache.httpcomponents:httpcore:4.3.2"
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.
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
Si vous avez besoin de sdk 23, ajoutez ceci à votre diplôme:
Android {
useLibrary 'org.Apache.http.legacy'
}
Utilisez simplement ceci: -
Android {
.
.
.
useLibrary 'org.Apache.http.legacy'
.
.
.
}
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.
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'
}
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? AndroidHttpClient
est réservé à l’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'
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')
}
Erreur: (30, 0) Méthode DSL Gradle introuvable: 'classpath ()' Causes possibles: