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 포함되어있습니까에 ?그렇지 않더라도 그래들 빌드에 이렇게 추가했습니다.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'org.apache.httpcomponents:httpclient:4.5'
}
마지막 컴파일 줄이 있든 없든 간에 오류는 동일합니다.제가 무엇을 빠뜨리고 있나요?
HttpClient
SDK 23에서는 더 이상 지원되지 않습니다.다를 해야 합니다.URLConnection
SDK 22로 )compile 'com.android.support:appcompat-v7:22.2.0'
)
SDK 23이 필요한 경우 그라들에 다음을 추가합니다.
android {
useLibrary("org.apache.http.legacy")
}
프로젝트에 직접 jar를 다운로드하여 포함하거나 OkHttp를 사용할 수도 있습니다.
HttpClient는 API Level 22에서 더 이상 사용되지 않고 API Level 23에서 제거되었습니다.필요하다면 API Level 23 이상에서도 사용할 수 있지만 HTTP를 처리하려면 지원되는 메서드로 이동하는 것이 좋습니다.23으로 컴파일하는 경우 빌드에 추가합니다.gradle:
android {
useLibrary("org.apache.http.legacy")
}
아래 링크의 TejaDroid의 답변이 도움이 되었습니다. org.apache.http를 가져올 수 없습니다.Android Studio의 Http Response
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'
...
}
SDK 레벨 23에 Apache HTTP를 사용하려면:
최상위 수준 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/
}
...
}
gradle 업데이트에 대한 Android studio의 알림:
모듈별 build.gradle - /app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
...
useLibrary 'org.apache.http.legacy'
...
}
이 종속성을 build.gradle 파일에 추가합니다.
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
- jar 파일답변 파일을 합니다. 1 - 에서 Apache jar ( 을 ) 4.5.zip 파일입니다.
2- jar 파일의 zip copy를 libs 폴더에 엽니다.프로젝트 맨 위에 '안드로이드'라고 쓰여 있는 곳에 가면 클릭하면 목록이 나옵니다.
안드로이드 -> 프로젝트 -> 앱 -> libs
그리고 거기에 항아리를 놓습니다.
3 - in build.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) 릴리스는 Apache HTTP 클라이언트에 대한 지원을 제거합니다.사용해야 합니다.
android {
useLibrary 'org.apache.http.legacy'
.
.
.
그리고 당신의 종속성에 아래의 코드 조각을 추가합니다.
//웹 서비스를 위한 최종 솔루션 제공(파일 업로드 포함)
compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
또한 Use MultipartEntity for File 업로드를 사용하는 동안에도 도움이 됩니다.
다음과 같은 클래스를 가져오려면:
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(그레이들 종속성)에서 다음 행을 추가할 수 있습니다.
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'
}
API 22에서 이 파일들은 더 이상 사용되지 않게 되고 API 23에서 이 파일들을 완전히 제거했습니다. 새로운 추가에서 멋진 것들이 필요하지 않다면 단순히 API 22 이전에 통합된 아파치의 .jar 파일을 사용하는 것이지만 분리된 .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
2021년 4월 기준으로 다음을 사용할 수 있습니다.
앱 그라들에서 'dependency {' 아래에 다음을 추가합니다.
implementation 'org.apache.httpcomponents:httpcore:4.4.10'
implementation 'org.apache.httpcomponents:httpclient:4.5.6'
Java 활동에서 다음 가져오기를 추가합니다.
import org.apache.http.client.HttpClient;
그러면 메서드에 HttpClient를 추가할 수 있습니다.
그라들 종속성에 간단히 추가할 수 있습니다.
compile "org.apache.httpcomponents:httpcore:4.3.2"
Android 6.0(API 레벨 23) 릴리스는 Apache HTTP 클라이언트에 대한 지원을 제거합니다.따라서 API 23에서는 이 라이브러리를 직접 사용할 수 없습니다.하지만 그것을 사용하는 방법이 있습니다.아래와 같이 build.gradle 파일에 Library 'org.apache.http.legacy'를 추가합니다.
android {
useLibrary 'org.apache.http.legacy'
}
만약 이것이 효과가 없다면, 당신은 다음의 해킹을 적용할 수 있습니다.
– Android SDK 디렉토리의 /platforms/android-23/옵션 경로에 있는 org.apache.http.legacy.jar를 프로젝트의 app/libs 폴더에 복사합니다.
– 이제 build.gradle 파일의 dependency{} 섹션 안에 컴파일 파일('libs/org.apache.http.legacy.jar')을 추가합니다.
ApacheHttp Client는 v23 sdk에서 제거됩니다.Http를 사용할 수 있습니다.URL Connection 또는 OkHttp와 같은 타사 Http Client.
: ref :https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client
한 줄만 추가하시면 됩니다.
useLibrary 'org.apache.http.legacy'
into 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'
}
이것을 사용하기만 하면 됩니다 :-
android {
.
.
.
useLibrary 'org.apache.http.legacy'
.
.
.
}
httpClient는 sdk 23 및 23+에서 지원되지 않습니다.
sdk 23에 사용해야 할 경우 그라들에 아래 코드를 추가합니다.
android {
useLibrary 'org.apache.http.legacy'
}
저한테 효과가 있어요.당신에게 도움이 되기를 바랍니다.
sdk 23이 필요하다면 이 내용을 그라들에 추가합니다.
android {
useLibrary 'org.apache.http.legacy'
}
아까처럼 .org.apache.http.client.HttpClient
더 되지 않습니다.
SDK (API 레벨) #23.
는 를 해야 합니다.java.net.HttpURLConnection
.
사용 시 코드(및 생활)를 보다 쉽게 만들고 싶다면HttpURLConnection
a, 에 입니다.Wrapper
당신이 간단한 작업을 할 수 있게 해주는 이 클래스의GET
,POST
그리고.PUT
용을 JSON
들어 a, , 를 하는 처럼.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;
}
}
프로젝트 내에서 어떤 API 목표를 가지고 있습니까?AndroidHttpClient
API Level 8 <. 그리고 여기를 확인해 주시기 바랍니다.
당신의 코드를 즐기세요.
다른 방법으로는 httpclient.jar 파일이 있는 경우 다음을 수행할 수 있습니다.
프로젝트의 "libs folder"에 .jar 파일을 붙여 넣습니다.그런 다음 gradle에서 build.gradle(Module: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')
}
종속성 아래에 이 두 줄을 추가합니다.
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
그리고나서
useLibrary 'org.apache.http.legacy'
안드로이드 체제하에
오류:(30, 0) 그래들 DSL 메서드를 찾을 수 없습니다. 'classpath()' 가능한 원인:
Manifest.xml의 Android API 28 이상의 경우 애플리케이션 내부 태그
<application
.
.
.
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
저도 같은 문제가 있어서 httpcclient libraries를 제거하고 아래에 언급된 line을 추가한 후 작동을 시작했습니다.이 라이브러리 안에 httpclient 클래스 래퍼가 있는 것 같습니다.
implementation("net.sourceforge.htmlunit:htmlunit-android:2.63.0")
어떤 안드로이드 스튜디오 버전을 가지고 있느냐에 따라 안드로이드 스튜디오도 업데이트하는 것이 중요하다고 생각합니다. 저도 모두의 조언에 따라 좌절하고 있었지만 운이 없었습니다. 안드로이드 버전을 1.3에서 1.5로 업그레이드해야 할 때까지 오류가 마법처럼 사라졌습니다.
언급URL : https://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio
'programing' 카테고리의 다른 글
게시/구독 패턴(JS/jQuery)을 사용하는 이유는 무엇입니까? (0) | 2023.09.17 |
---|---|
XElement를 통해 속성을 넣는 방법 (0) | 2023.09.17 |
MySQL 데이터 유형:텍스트, , 오류: 데이터가 너무 깁니다. (0) | 2023.09.17 |
JQuery를 사용하여 드롭다운 목록 지우기 (0) | 2023.09.17 |
sql의 시퀀스 오류입니다.시퀀스 번호는 여기서 허용되지 않습니다. (0) | 2023.09.17 |