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 ответа:
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:
модуль конкретной сборки.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%2F2 - Откройте 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' }
его работа для меня. Надеюсь, что полезно для вас.
вы должны добавить только одну строку
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' }