285

У меня есть простой класс, написанный в Android Studio:HttpClient не будет импортировать в Android Studio

package com.mysite.myapp; 

import org.apache.http.client.HttpClient; 

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

и от этого я получаю следующую ошибку компиляции времени:

ISN» t HttpClient включен в Android Studio SDK? Даже если это не так, я добавил его к моему Gradle построить так:

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

С или без последней строки компиляции, ошибка та же. Что мне не хватает?

+3

Попробуйте использовать 'AndroidHttpClient', если сможете. Штыри HttpClient действительно содержатся внутри андроида, поэтому не должно быть необходимости ссылаться на него явно. Обратите внимание, что версия httpclient для Android может быть 4.1.1. Попытка использовать более новую версию поверх этого обычно запрашивает проблемы (чтение: не работает, потому что всегда загружается загрузчик классов прошивки). – dhke

ответ

687

HttpClient не поддерживается больше в SDK 23. Вы должны использовать URLConnection или даунгрейда до SDk 22 (compile 'com.android.support:appcompat-v7:22.2.0')

Если вам нужен SDK 23, добавьте это к вашему Gradle:

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

Вы также можете попробовать скачать и включить HttpClient jar прямо в свой проект или использовать OkHttp вместо

+3

Ссылка на объявление: https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client – dhke

+18

Это не делает ничего в моем случае. Как так? –

+2

useLibrary не может быть разрешен, когда я его добавляю. Моя цель 23, чего я не хватает? – fullMoon

3

Какую цель API у вас есть в рамках вашего проекта? AndroidHttpClient предназначен только для API уровня 8 <. и, пожалуйста, посмотрите на here

наслаждаться код :)

5

ApacheHttp Клиент удален в v23 SDK. Вы можете использовать HttpURLConnection или сторонний Http-клиент, например OkHttp.

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

+0

Использование HttpUrlConnection на самом деле поощряется вместо HttpClient –

140

HttpClient осуждался в уровне 22 API и удалены в уровне API 23. Вы все еще можете использовать его в уровне API 23 и далее, если необходимо, однако, лучше перейти на поддерживаемых методов обрабатывать HTTP. Таким образом, если вы компилируете с 23, добавьте это в build.gradle:

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

Это должен быть принятый ответ. –

+1

легко и быстрое решение, если кто-то не прочь использовать устаревший класс ... – prom85

+4

'андроида { useLibrary«org.apache.http.legacy» }' ** [когда и добавить] ** ** [ 1] ** «org.apache.http» андроид-студия все еще имеет подсказки: «Невозможно разрешить символ» ** [2] ** это может сделать сборка android-studio (с sdk23). хотя есть подсказки (не удается разрешить символ) ** [3] ** если у добавить jar, нет никаких советов, можно построить, но !!! не может работать, потому что у него есть две копии 'org.apache.http' – YETI

15

1- скачать Apache опарника (как этот ответ) файл 4.5.zip от:
https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2- Откройте zip, скопируйте файлы jar в папку libs. Вы можете найти его, если перейдете к вершине своего проекта, где говорится «Android», вы найдете список, когда вы нажмете его. Таким образом,

Android -> Project -> app -> libs

, Затем положить банки там.

3- В строительстве.ГДООВ (Mudule: приложение) добавить

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

в

dependency { 
    } 

4- В классе Java добавить этот импорт:

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

Чтобы использовать Apache HTTP для SDK Уровень 23:

Верхний уровень 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/ 
    } 
    ... 
} 

Уведомление от Android студии о Gradle обновление:

Notification from Android studio about gradle update

Модуль конкретных build.gradle - /app/build.gradle

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

Только это сработало для меня, спасибо! – Roman

6

в API 22 они становятся устаревшими и в API 23 они полностью удалили их, простое обходное решение, если вам не нужны все причудливые вещи из новых дополнений - просто использовать .jar файлы апача, которые были интегрированы, прежде чем API 22, но отделенные .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 
4

Вы можете просто добавить это Gradle зависимости: ответ

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

Это помогает. Но все же недостаточно, если вы хотите использовать другие классы, такие как 'HttpGet'. Для этого я использовал 'compile 'org.jbundle.util.osgi.wrapped: org.jbundle.util.osgi.wrapped.org.apache.http.client: 4.1.2'' – AlexAndro

50

TejaDroid в ссылке ниже помог мне. Can't import 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' 
    ... 
} 
+0

тоже работал для меня –

+0

спасибо, что это только решение, которое работало с новыми экспериментальными сборками, как useLibrary, не распознается в нем – pt123

+0

thankz.It работает для меня –

2

Another way is if you have httpclient.jar file then you can do this :

Вставьте ваш .jar файл в "папку ЛИЭС" в вашем проекте. Затем в Gradle добавить эту строку в build.gradle (Module: приложение)

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
compile 'com.android.support:appcompat-v7:23.0.0' 
compile files('libs/httpcore-4.3.3.jar') 
} 
28

Попробуйте работал для меня Добавить эту зависимость в свой build.gradle Файл

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

Спасибо, ты спасешь мою жизнь. :) –

5

Android 6,0 ​​(API Уровень 23) освобождает поддержку HTTP-клиента Apache. Следовательно, вы не можете использовать эту библиотеку непосредственно в API 23. Но есть способ ее использования. Добавить useLibrary «org.apache.http.legacy» в файле build.gradle в

ценам ниже
android { 
    useLibrary 'org.apache.http.legacy' 
} 

Если это не работает, вы можете применить следующую hack-

- Копировать org.apache.http .legacy.jar, который находится в каталоге/platform/android-23/optional вашего каталога Android SDK в папку вашего приложения/libs вашего проекта.

- Теперь добавьте файлы компиляции ('libs/org.apache.http.legacy.jar') внутри зависимых {} разделов файла build.gradle.

+0

Последний вариант, который вы дали, хорошо выполняет эту работу. Я ценю. –

4

Просто используйте: -

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

HttpClient не поддерживается больше в SDK 23. Android 6.0 (API Level 23) выпуск удаляет поддержку клиента Apache HTTP. Вы должны использовать

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

, а также добавить ниже фрагмент кода в вашей зависимости:

// HTTP окончательное решение для веб-сервиса (в том числе загрузки файлов)

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

Она также будет помогите вам, пока вы используете Use MultipartEntity для Загрузка файла.

+0

Эта работа для mee –

+0

Рад слышать, что она вам помогает :) –

+0

У меня проблемы с этим ... дубликат записи: org/apache/http/HttpHeaders.class. Вы знаете, в чем проблема? – DaniG

-1

Я думаю, в зависимости от того, какая версия Android Studio у вас есть, важно также обновить свою студию Android, я тоже разочаровался в советах каждого, но не повезло, пока мне не пришлось обновлять версию Android от 1.3 до 1.5, ошибки исчезли, как магия.

4

HttpClient не поддерживается в sdk 23 и 23+.

Если вам нужно использовать в SDK 23, добавьте ниже кода в Gradle:

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

Its работает для меня. Надеюсь, полезно для вас.

+0

Отлично работает с SDK версии 24 –

4

Если вам нужен SDK 23, добавьте это к вашему Gradle:

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

Добавьте эти две строки под зависимостями

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

затем

useLibrary 'org.apache.http.legacy' 

под андроид

4

Вы должны добавить только одна линия

useLibrary 'org.apache.http.legacy' 

в build.gradle (модуль: приложение), например

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

Как упоминалось ранее, org.apache.http.client.HttpClient не поддерживается больше в:

SDK (уровень API) # 23.

Вы должны использовать java.net.HttpURLConnection.

Если вы хотите сделать свой код (и жизнь) проще при использовании HttpURLConnection, вот Wrapper этого класса, который позволит вам делать простые операции с GET, POST и PUT использованием JSON, как, например, делать 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() 

Не стесняйтесь использовать его.

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

} 
+0

спасибо, отличная работа! – KGCybeX

0

Ошибка: (30, 0) Gradle метод DSL не найден: «путь к классам()» Возможные причины:

  • проекта «ИДС» может использовать версию Android Gradle плагин, который не содержат метод (например, 'testCompile' был добавлен в 1.1.0). Обновление плагина до версии 2.3.3 и проект синхронизации
  • В проекте 'cid' может использоваться версия Gradle, которая не содержит метод. Файл оболочки Open Gradle
  • В файле сборки может отсутствовать плагин Gradle. Применить Gradle plugin
  • Смежные вопросы