Android veraltetes Apache-Modul (HttpClient, HttpResponse usw.)

Lesezeit: 3 Minuten

Android veraltetes Apache Modul HttpClient HttpResponse usw
Eugeni

Android hat das Apache-Modul seit API-Level 22 als veraltet markiert, daher lautet meine Frage, wie ich es zum Beispiel verwende HttpResponse aus der Apache-Bibliothek, nicht aus dem Android SDK? Das Problem ist, dass sie in beiden Paketen gleich sind.

Aber zum Beispiel HttpGet ist OK, denn es heißt HttpGetHC4 im Apachen.

  • Lesen Sie einfach die Dokumentation und sehen Sie sich Beispiel-Apps unter dem Apache-Link an. Wo Namensräume kollidierten, sehen Sie das Suffix=HC4

    – Robert Rowntree

    30. März 2015 um 20:36 Uhr

  • Schauen Sie sich diese Informationen für vollständige Details an, beste Erklärung stackoverflow.com/questions/2793150/…

    – k

    24. September 2016 um 14:53 Uhr

1646265788 57 Android veraltetes Apache Modul HttpClient HttpResponse usw
Vincent091

Die Methode HttpClient war veraltet. Sie können jetzt die URLConnection verwenden, wie Sie in diesem Beispiel sehen können:

private StringBuffer request(String urlString) {
    // TODO Auto-generated method stub

    StringBuffer chaine = new StringBuffer("");
    try{
        URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestProperty("User-Agent", "");
        connection.setRequestMethod("POST");
        connection.setDoInput(true);
        connection.connect();

        InputStream inputStream = connection.getInputStream();

        BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        while ((line = rd.readLine()) != null) {
            chaine.append(line);
        }
    }
    catch (IOException e) {
        // Writing exception to log
        e.printStackTrace();
    }
    return chaine;
}

Ich hoffe, das hilft jemandem.

  • Ich habe dasselbe getan, aber das Problem, dass die öffnende Klammer des JSON-OBJEKTS nicht gelesen wird, das das einzige Zeichen in einer Zeile ist. Zum Beispiel: {Name würde richtig gelesen werden, aber { neuer Zeilenname (in diesem Fall wird die öffnende Klammer nicht richtig gelesen)

    – Sagar Devanga

    10. September 2015 um 11:32 Uhr


1646265789 569 Android veraltetes Apache Modul HttpClient HttpResponse usw
Jehy

Es ist nichts Schlechtes daran, die Module von Apache zu verwenden. Google hat einfach ein großes Chaos daraus gemacht, weil es ihnen nicht gelungen ist, einen erfolgreichen Fork zu erstellen. Die Google- und Apache-Integration wurde von Jesse Wilson überwacht – er arbeitete in Google, brachte alles durcheinander und erstellte dann während der Arbeit im Quadrat seine eigene Bibliothek (OkHttp). Das ist eine wirklich hässliche Geschichte.

Ich rate davon ab, die alte JAR-Datei zu verwenden, da sie eine alte Version von Apache-Bibliotheken ohne Verbesserungen und Bugfixes enthält (es ist eine sehr alter Pre-BETA-Snapshot). Wie Sie auf der sehen können Offizielle Seite Von den Apache-Komponenten gibt es eine neue Version 4.4, die mit allen Android-Versionen kompatibel ist. Es musste nur unter einem anderen Namensraum neu gepackt werden, um eine Kollision mit der alten Version zu vermeiden.

Sie können einfach die Abhängigkeit von hinzufügen Maven (oder Download-Version von GitHub):

dependencies {
    compile "cz.msebera.android:httpclient:4.4.1.2"
}

Und dann ersetzen org.apache.http mit cz.msebera.android.httpclientsodass Ihre Importe wie folgt aussehen:

import cz.msebera.android.httpclient.Header;
import cz.msebera.android.httpclient.HttpHost;
import cz.msebera.android.httpclient.HttpResponse;

Ja, Sie können weiterhin Apache-Bibliotheken verwenden, ohne Stunden mit dem Umschreiben von funktionierendem Code zu verschwenden!

Was den Unterschied zwischen der Verwendung von Apache-Komponenten und HttpURLConnection betrifft, so verwendet HttpURLConnection das Zwischenspeichern von Antworten … Und das ist alles. Ich bin mir nicht sicher, ob Sie es wirklich wollen und Sie können es auch immer selbst umsetzen.

Übrigens habe ich Alternativen wie HttpURLConnection ausprobiert – diese sind nicht einmal annähernd an die Leistung und Einfachheit von Apache heranreicht.

  • Ich habe die Implementierung geändert, nachdem ich mehrere Stunden mit HttpUrlConnection verbracht hatte. Du hast recht. Das ist nicht einmal in der Nähe der Apache-Bibliothek. Kann jemand erklären, warum der Client von msebera für Apps empfohlen wird, die auf SDK 23 abzielen, und der “offizielle” nur für Geräte, die auf <= SDK 22 abzielen (siehe hier: hc.apache.org/httpcomponents-client-4.5.x/android-port.html) Das verstehe ich nicht ganz. Danke

    – AndyB

    16. Januar 2017 um 9:01 Uhr


  • Das sollte die Antwort sein! Danke, Mann! Ich könnte alles ändern, ohne dass meine App kaputt geht. Keine veralteten Kreuzungen mehr!! 🙂

    – Christoph Smit

    14. Juli 2017 um 10:44 Uhr

  • Tolle Antwort, die den Grund erklärt, warum wir KEINE Angst vor der Verwendung von Apache-Bibliotheken haben sollten. Bei allen Warnungen im Internet halten wir es für eine schlechte Idee, sie zu verwenden, aber nachdem Sie dies gelesen und einige Punkte überprüft haben, retten Sie den Tag. Danke!

    – rmpt

    5. September 2018 um 11:33 Uhr

  • Du hast meinen Tag gerettet. Dies ist die bessere Lösung, um eine Abwärtskompatibilität zu gewährleisten. Erst nachdem die meisten Benutzer auf Android 5.0+ aktualisiert haben, würde ich die Verwendung von okhttp in Betracht ziehen.

    – Joe Tse

    21. Februar 2019 um 4:33 Uhr

In Android Marshmallow (sdk 23) können Sie Folgendes hinzufügen:

useLibrary 'org.apache.http.legacy'

zu bauen.gradle in der android {} Abschnitt als Problemumgehung. Dies scheint für einige von Googles eigenen gms-Bibliotheken notwendig zu sein!

  • Ich versuche, dies hinzuzufügen, aber ich habe diesen Fehler: Error:(55, 0) Gradle DSL method not found: ‘useLibrary()’

    – Jachumbelechao zu Mantekilla

    9. September 2015 um 11:37 Uhr


  • Ich muss meine Gradle-Version im buildsrcipt-Klassenpfad ‘com.android.tools.build:gradle:1.3.1’ ändern. Jetzt funktioniert

    – Jachumbelechao zu Mantekilla

    9. September 2015 um 13:37 Uhr


  • NICHT auf diese Weise verwenden. Es funktioniert nur vor Android 8.0. Android 8.0+ erzwingt die Ablehnung von org.apache.http, was zu Abstürzen führt. Ich wurde so sehr verletzt.

    – Joe Tse

    21. Februar 2019 um 4:35 Uhr


  • @JoeTse: Wir hatten dieses Problem mit Android 9, aber es gibt eine Problemumgehung in der Versionshinweise – Sehen Sie sich die Manifeständerung an, um HttpClient zuzulassen. Die andere Möglichkeit besteht darin, einen anderen HttpClient-Build von Apache oder jemand anderem zu verwenden.

    – Nick Westgate

    15. August 2019 um 6:20 Uhr

1646265789 390 Android veraltetes Apache Modul HttpClient HttpResponse usw
mmlooo

Wenn ich du wäre, benutze ich nicht HttpClient da:

Apache HTTP-Client hat weniger Fehler auf Eclair und Froyo. Es ist die beste Wahl für diese Versionen.

Für Gingerbread und besser ist HttpURLConnection die beste Wahl.

Referenz

Verwenden OKHttp oder HttpUrlConnection. Außerdem empfehle ich, die Apache-Bibliothek nicht zu verwenden, da sie für Android möglicherweise nicht effizient ist.

Ich denke, Sie könnten die Apache-Bibliotheken direkt in Ihrem Projekt verwenden und nicht die mit Android gelieferten (Sie können auf diese Weise mehr Kontrolle erhalten – und bei Bedarf mit einer älteren SDK-Version kompilieren).

In deiner build.gradlefügen Sie diese Zeile hinzu:

dependencies {
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Um Warnungen zu vermeiden, fügen Sie auch diese Zeilen hinzu:

android {

     -- YOUR EXISTING LINES --

     packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }

}

1646265789 269 Android veraltetes Apache Modul HttpClient HttpResponse usw
Peter Mortensen

Fügen Sie dies zu den Abhängigkeiten Ihrer App hinzu, und dann wird es richtig funktionieren:

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

Android veraltetes Apache Modul HttpClient HttpResponse usw
A-Schi

Wenn Sie dennoch die httpclient-Bibliothek verwenden möchten, sollten Sie der build.gradle-Datei eine Beschreibung hinzufügen. Und es scheint, dass der Inhalt, der der build.gradle-Datei hinzugefügt wird, durch das Ziel-Android-Projekt bestimmt wird, für das erstellt wird.

Wenn es auf API22 und älter ausgerichtet ist, sollte die folgende Zeile in build.gradle hinzugefügt werden

dependencies {
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Wenn es auf API23 und höher ausgerichtet ist, sollte die folgende Zeile in build.gradle hinzugefügt werden

dependencies {
    compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'
}

Hier ist die Referenz Verknüpfung

917520cookie-checkAndroid veraltetes Apache-Modul (HttpClient, HttpResponse usw.)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy