it-swarm.com.de

HttpClient wird nicht in Android Studio importiert

Ich habe eine einfache Klasse in Android Studio geschrieben:

package com.mysite.myapp;

import org.Apache.http.client.HttpClient;

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

und daraus erhalte ich den folgenden Kompilierungsfehler:

Cannot resolve symbol HttpClient

Ist HttpClient nicht im Android Studio SDK enthalten? Auch wenn dies nicht der Fall ist, habe ich es meinem Gradle-Build folgendermaßen hinzugefügt:

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

Mit oder ohne die letzte Kompilierungszeile ist der Fehler derselbe. Was vermisse ich?

342
Alex

HttpClient wird in SDK 23 nicht mehr unterstützt. Sie müssen URLConnection oder ein Downgrade auf SDK 22 (compile 'com.Android.support:appcompat-v7:22.2.0') verwenden.

Wenn Sie SDK 23 benötigen, fügen Sie dies Ihrem Gradle hinzu:

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

Sie können auch versuchen, HttpClient jar herunterzuladen und direkt in Ihr Projekt aufzunehmen, oder OkHttp verwenden

784
Ilya Blokh

HttpClient wurde in API Level 22 als veraltet eingestuft und in API Level 23 entfernt. Sie können es weiterhin in API Level 23 und höher verwenden, es ist jedoch am besten, zu unterstützten Methoden zu wechseln, um HTTP zu verarbeiten. Wenn Sie also mit 23 kompilieren, fügen Sie dies in Ihr build.gradle ein:

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

Die Antwort von TejaDroid unter dem Link hat mir geholfen. org.Apache.http.HttpResponse kann in Android Studio nicht importiert werden

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

So verwenden Sie Apache HTTP für SDK Level 23:

Build.gradle der obersten Ebene - /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/
    }
    ...
}

Benachrichtigung von Android Studio über gradle update:

Notification from Android studio about gradle update

Modulspezifisches build.gradle - /app/build.gradle

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

Versuchen Sie, dies funktionierte für mich. Fügen Sie diese Abhängigkeit zu Ihrer build.gradle-Datei hinzu

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

1- Apache-JAR-Dateien herunterladen (Stand dieser Antwort) 4.5.Zip-Datei von:
https://hc.Apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2- Öffnen Sie die Zip-Datei und kopieren Sie die JAR-Dateien in Ihren libs-Ordner. Sie können es finden, wenn Sie an den Anfang Ihres Projekts gehen, in dem "Android" steht. Sie finden eine Liste, wenn Sie darauf klicken. Damit,

Android -> Projekt -> App -> Bibliotheken

Dann stellen Sie Gläser dort.

3- In build.gradle (Modul: App) hinzufügen

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

im

 dependency { 
   }

4- Fügen Sie in der Klasse Java die folgenden Importe hinzu:

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 wird in SDK 23 nicht mehr unterstützt. Android 6.0 (API Level 23) entfernt die Unterstützung für den Apache HTTP-Client. Sie müssen verwenden

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

und fügen Sie in Ihrer Abhängigkeit das folgende Code-Snippet hinzu:

// http endgültige Lösung für Web-Service (einschließlich Datei-Upload)

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

Es wird Ihnen auch helfen, wenn Sie Use MultipartEntity für File upload verwenden.

14
android_sh

in API 22 sind sie veraltet und in API 23 wurden sie vollständig entfernt. Eine einfache Umgehung, wenn Sie nicht das ganze schicke Zeug der neuen Ergänzungen benötigen, besteht darin, einfach die .jar-Dateien von Apache zu verwenden, die vor API 22 integriert wurden, aber als getrennte .jar-Dateien:

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

Wenn Sie eine Klasse importieren möchten, wie:

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;

Sie können die folgende Zeile in build.gradle hinzufügen (Gradle-Abhängigkeiten)

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

Sie können dies einfach zu Gradle-Abhängigkeiten hinzufügen:

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

In Android 6.0 (API Level 23) wird der Apache HTTP-Client nicht mehr unterstützt. Daher können Sie diese Bibliothek nicht direkt in API 23 verwenden. Es gibt jedoch eine Möglichkeit, sie zu verwenden. Fügen Sie useLibrary ‘org.Apache.http.legacy’ in Ihre build.gradle-Datei wie folgt hinzu:

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

Wenn dies nicht funktioniert, können Sie die folgenden Hack-

- Kopieren Sie die Datei org.Apache.http.legacy.jar im Verzeichnis/platform/Android-23/optional des SDK-Verzeichnisses Android in den Ordner app/libs Ihres Projekts.

- Fügen Sie nun Kompilierungsdateien ("libs/org.Apache.http.legacy.jar") im Abschnitt "Abhängigkeiten {}" der Datei "build.gradle" hinzu.

6
user3766643

ApacheHttp Client wird in v23 sdk entfernt. Sie können HttpURLConnection oder einen Http-Client eines Drittanbieters wie OkHttp verwenden.

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

5
Kirtan

Wenn Sie SDK 23 benötigen, fügen Sie dies Ihrem Gradle hinzu:

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

Verwenden Sie einfach diese: -

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

HttpClient wird in SDK 23 und 23+ nicht unterstützt.

Wenn Sie in SDK 23 verwenden müssen, fügen Sie Ihrem Gradle den folgenden Code hinzu:

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

Es funktioniert für mich. Hoffe nützlich für dich.

4
Sneha Patel

Sie müssen nur eine Zeile hinzufügen

useLibrary 'org.Apache.http.legacy'

in build.gradle (Module: app) zum Beispiel

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

Wie bereits erwähnt, wird org.Apache.http.client.HttpClient nicht mehr unterstützt in:

SDK (API-Ebene) # 23.

Sie müssen Java.net.HttpURLConnection verwenden.

Wenn Sie Ihren Code (und Ihr Leben) mit HttpURLConnection vereinfachen möchten, finden Sie hier ein Wrapper dieser Klasse, mit dem Sie einfache Operationen mit GET, POST ausführen können. und PUT mit JSON, wie zum Beispiel einen 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()

Fühlen Sie sich frei, es zu benutzen.

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

}

Welches API-Ziel haben Sie in Ihrem Projekt? AndroidHttpClientist nur für API Level 8 <. und schauen Sie doch mal hier

genieße deinen Code :)

3
John smith

Fügen Sie diese beiden Zeilen unter Abhängigkeiten hinzu

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

dann

useLibrary 'org.Apache.http.legacy'

unter dem Android

Eine andere Möglichkeit ist, wenn Sie die Datei httpclient.jar haben, dann können Sie dies tun:

Fügen Sie Ihre .jar-Datei in Ihrem Projekt in den Ordner "libs" ein. Dann füge in gradle diese Zeile in dein build.gradle ein (Modul: 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

Fehler: (30, 0) DSL-Methode für Gradle nicht gefunden: 'classpath ()' Mögliche Ursachen:

  • Das Projekt "cid" verwendet möglicherweise eine Version des Gradle-Plug-Ins "Android", die die Methode nicht enthält (z. B. "testCompile" wurde in 1.1.0 hinzugefügt). Aktualisieren Sie das Plugin auf Version 2.3.3 und synchronisieren Sie das Projekt
  • Das Projekt 'cid' verwendet möglicherweise eine Version von Gradle, die die Methode nicht enthält. Öffnen Sie die Gradle-Wrapper-Datei
  • In der Build-Datei fehlt möglicherweise ein Gradle-Plugin. Wende das Gradle-Plugin an
  • 0
    Eshan Chattaraj