Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


HttpClient no importará en Android Studio

Tengo una clase sencilla escrita en Android Studio:

package com.mysite.myapp; import org.apache.http.client.HttpClient; public class Whatever { public void headBangingAgainstTheWallExample () { HttpClient client = new DefaultHttpClient(); } } 

Y de esto consigo el error siguiente del tiempo de la compilación:

Cannot resolve symbol HttpClient

¿No HttpClient incluye HttpClient en el SDK de Android Studio? Incluso si no lo es, lo agregué a mi versión de Gradle así:

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

Con o sin la última línea de compilación, el error es el mismo. ¿Qué me estoy perdiendo?

  • Usando retrofit con persistencia de Cookie
  • Almacenamiento del cliente Android Http
  • ¿Cómo puedo importar correctamente HttpClient de org.apache en Android usando el archivo de compilación gradle?
  • Java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE
  • 'Org.apache.http.HttpEntity' está obsoleto. ¿Cómo solucionar este error en android studio?
  • JUnit UnsatisfiedLinkError: android.util.Log.isLoggable (Ljava / lang / String;
  • Android: Esquema 'http' no registrado en ICS 4.0.4 con proxy
  • Android HttpClient, DefaultHttpClient, HttpPost
  • 20 Solutions collect form web for “HttpClient no importará en Android Studio”

    HttpClient no es compatible más en sdk 23. Tienes que usar URLConnection o degradar a sdk 22 ( compile 'com.android.support:appcompat-v7:22.2.0' )

    Si necesita sdk 23, agregue esto a su gradle:

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

    También puede intentar descargar e incluir HttpClient jar directamente en su proyecto o utilizar OkHttp en su lugar

    HttpClient estaba obsoleto en el nivel 22 de la API y se eliminó en el nivel 23 de la API. Puede seguir utilizándolo en el nivel 23 de la API y en adelante si es necesario, sin embargo es mejor pasar a métodos compatibles para controlar HTTP. Por lo tanto, si está compilando con 23, agregue esto en su build.gradle:

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

    La respuesta de TejaDroid en el siguiente enlace me ayudó. No se puede importar org.apache.http.HttpResponse en 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' ... } 

    Para usar Apache HTTP para SDK Nivel 23:

    Nivel superior build.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/ } ... } 

    Notificación del estudio de Android acerca de la actualización de gradle:

    Notificación del estudio de Android acerca de la actualización de gradle

    Módulo específico build.gradle – /app/build.gradle

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

    Pruebe esto funcionó para mí Añadir esta dependencia a su archivo build.gradle

     compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' 

    1- descarga archivos Apache jar (as de esta respuesta) archivo 4.5.zip de:
    https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

    2- Abra la copia zip de los archivos jar en su carpeta libs. Puedes encontrarlo si vas a la parte superior de tu proyecto donde dice "Android" encontrarás una lista cuando hagas click en ella. Asi que,

    Android -> Proyecto -> aplicación -> libs

    , Luego poner frascos allí.

    3- En build.grale (Mudule: app) agrega

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

    en

      dependency { } 

    4- En la clase java, añada estas importaciones:

     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 no es compatible más en sdk 23. La versión de Android 6.0 (API Level 23) elimina la compatibilidad con el cliente HTTP de Apache. Tienes que usar

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

    Y también agrega fragmento de código debajo de tu dependencia:

    // http solución final para servicio web (incluida la carga de archivos)

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

    También le ayudará mientras usa Use MultipartEntity para la carga de archivos .

    En la API 22 se vuelven obsoletas y en la API 23 se eliminan por completo, una solución simple si no necesita todas las cosas de lujo de las nuevas adiciones es simplemente utilizar los archivos .jar de apache que se integraron antes de la API 22, pero Como archivos .jar separados:

     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 

    ApacheHttp Client se quita en v23 sdk. Puede utilizar HttpURLConnection o terceros Http Client como OkHttp.

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

    La versión de Android 6.0 (API Level 23) elimina la compatibilidad con el cliente Apache HTTP. Por lo tanto, no puede utilizar esta biblioteca directamente en la API 23. Pero hay una manera de usarla. Agregue useLibrary 'org.apache.http.legacy' en su archivo build.gradle como abajo-

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

    Si esto no funciona, puede aplicar los siguientes hack-

    – Copie org.apache.http.legacy.jar que está en / platform / android-23 / ruta opcional de su directorio de SDK de Android a la carpeta app / libs de su proyecto.

    – Ahora agrega archivos de compilación ('libs / org.apache.http.legacy.jar') dentro de la sección de dependencias {} del archivo build.gradle.

    Simplemente puede agregar esto a las dependencias de Gradle:

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

    Simplemente use esto: –

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

    HttpClient no es compatible con sdk 23 y 23+.

    Si necesita usar en sdk 23, añada el siguiente código a su gradle:

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

    Está funcionando para mí. Espere útil para usted.

    ¿Qué objetivo de API tiene dentro de su proyecto? AndroidHttpClient es sólo para el Nivel 8 de la API. Y por favor, eche un vistazo aquí

    Disfruta tu código

    Otra manera es si usted tiene el archivo httpclient.jar entonces usted puede hacer esto:

    Pegue el archivo .jar en la carpeta "libs" de su proyecto. Luego en gradle agregue esta línea en su 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') } 

    Si necesita sdk 23, agregue esto a su gradle:

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

    Sólo tienes que añadir una línea

     useLibrary 'org.apache.http.legacy' 

    En build.gradle (Module: app), por ejemplo

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

    Agregue estas dos líneas bajo dependencias

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

    entonces

     useLibrary 'org.apache.http.legacy' 

    Bajo el androide

    Como se mencionó anteriormente, org.apache.http.client.HttpClient no se admite más en:

    SDK (nivel API) # 23.

    Tienes que usar java.net.HttpURLConnection .

    Si desea hacer su código (y la vida) más fácil cuando se utiliza HttpURLConnection , aquí es un Wrapper de esta clase que le permitirá hacer operaciones sencillas con GET , POST y PUT utilizando JSON , como por ejemplo, haciendo 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() 

    Sientase libre de usarlo.

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

    Creo que dependiendo de la versión de Android Studio que tengas, es importante que actualices tu estudio de android, también me estaba frustrando seguir los consejos de todos, pero no tuve suerte, hasta que tuve que actualizar mi versión de Android de 1.3 a 1.5, los errores desaparecieron como magia.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.