HttpClient не будет импортировать в Android Studio


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

package com.mysite.myapp;

import org.apache.http.client.HttpClient;

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

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

Cannot resolve symbol HttpClient

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

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

22 310

22 ответа:

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 вместо

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

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

ответ TejaDroid в приведенной ниже ссылке помог мне . не удается импортировать организацию.апаш.http.HttpResponse в 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'
    ...
}

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

сборка верхнего уровня.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 studio об обновлении gradle:

Notification from Android studio about gradle update

модуль конкретной сборки.gradle - /app / build.gradle

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

попробуйте это работать на меня Добавьте эту зависимость в свою сборку.gradle File

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

1-Загрузите файлы Apache jar (по состоянию на этот ответ) 4.5.zip-файл from:
https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2 - Откройте zip скопируйте файлы jar в папку libs. Вы можете найти его, если вы идете в верхней части вашего проекта, где он говорит "Android" вы найдете список, когда вы щелкните его. Итак,

Android - > Project - > app - > libs

,затем поставить банки там.

3 - в строй.gradle (модуль: приложение) добавить

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;

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

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

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

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

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

Это также поможет вам при использовании Use MultipartEntity на загрузить.

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

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

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

Android 6.0 (уровень API 23) релиз удаляет поддержку для клиента Apache HTTP. Поэтому вы не можете использовать эту библиотеку непосредственно в API 23. Но есть способ его использовать. Добавьте useLibrary ' org.апаш.http.наследие ' в вашей сборке.gradle файл, как показано ниже -

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

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

– копию орг.апаш.http.наследие.jar, который находится в /platforms / android-23 / необязательный путь вашего каталога Android SDK к приложению/libs вашего проекта папка.

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

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

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

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

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

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

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

Если вам нужен sdk 23, добавьте это в свой gradle:

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

просто использовать это :-

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

вы должны добавить только одну строку

useLibrary 'org.apache.http.legacy'

в строить.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'
}

какая цель API у вас есть в вашем проекте?AndroidHttpClientтолько для уровня API 8 <.>здесь

заказать код:)

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

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

затем

useLibrary 'org.apache.http.legacy'

под android

другой способ-если у вас есть httpclient.банку файл, который вы можете сделать это :

вставить .jar-файл в папке "libs" в вашем проекте. Затем в gradle добавьте эту строку в свою сборку.gradle (модуль:приложение)

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

Как упоминалось ранее, 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;
    }

}

ошибка: (30, 0) метод Gradle DSL не найден: 'classpath()' Возможные причины:

  • проект ' cid 'может использовать версию плагина Android Gradle, которая не содержит метод (например,' testCompile ' был добавлен в 1.1.0). Обновите плагин до версии 2.3.3 и синхронизируйте проект
  • проект ' cid ' может использовать версию Gradle, которая не содержит метод. Откройте файл Gradle wrapper
  • в файле сборки может отсутствовать плагин Gradle. Применить Gradle В плагин
  • Если вы хотите импортировать какой-то класс, например:

    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;
    

    Вы можете добавить следующую строку в build.gradle (Gradle dependencies)

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

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