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'
}
最後のコンパイル行の有無にかかわらず、エラーは同じです。何が足りないの?
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でコンパイルしているのであれば、build.gradleにこれを追加します。
Android {
useLibrary 'org.Apache.http.legacy'
}
下のリンクのTejaDroidの答えは私を助けました。 Android Studioにorg.Apache.http.HttpResponseをインポートできません
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 Level 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/
}
...
}
グレードアップに関するAndroidスタジオからの通知:
モジュール固有の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'
1 - Apache jarファイルをダウンロードします(この回答の時点で)。4.5。zipファイルから:
https://hc.Apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F
2 - Zipを開き、jarファイルをlibsフォルダにコピーします。あなたがそれを見つけることができますあなたがそれを見つけることができますあなたがそれをクリックするとき、あなたはそれが「Android」を言うあなたのプロジェクトのトップに行くならあなたはそれをリストを見つけるでしょう。そう、
Android - >プロジェクト - > app - > libs
その後、そこに瓶を置きます。
3- in build.gradle(モジュール:app)追加
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 Level 23)リリースではApache HTTPクライアントのサポートが削除されました。あなたが使用する必要があります
Android {
useLibrary 'org.Apache.http.legacy'
.
.
.
また、あなたの依存関係に以下のコードスニペットを追加します。
// Webサービス用のhttp最終ソリューション(ファイルのアップロードを含む)
compile('org.Apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.Apache.httpcomponents:httpclient-Android:4.3.5'
Use MultipartEntity / File upload を使用している間にも役立ちます。
aPI 22ではそれらは非推奨となり、API 23ではそれらを完全に削除しました。新しい追加からの素晴らしいものがすべて必要ない場合の単純な回避策は、API 22より前に統合されたApacheの.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
以下のようなクラスをインポートしたい場合は、
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 {
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'
}
これをGradleの依存関係に簡単に追加できます。
compile "org.Apache.httpcomponents:httpcore:4.3.2"
Android 6.0(API Level 23)リリースでは、Apache HTTPクライアントのサポートが削除されています。したがって、このライブラリをAPI 23で直接使用することはできません。しかし、それを使用する方法があります。下記のように、build.gradleファイルにuseLibraryの「org.Apache.http.legacy」を追加します。
Android {
useLibrary 'org.Apache.http.legacy'
}
これでうまくいかない場合は、次のハックを適用する可能性があります。
- あなたのプロジェクトのapp/libsフォルダにあなたのAndroid SDKディレクトリの/ platform/Android-23/optional pathにあるorg.Apache.http.legacy.jarをコピーしてください。
- build.gradleファイルのdependencies {}セクション内にコンパイルファイル( 'libs/org.Apache.http.legacy.jar')を追加します。
あなたはSDK 23が必要な場合は、あなたのgradleにこれを追加します。
Android {
useLibrary 'org.Apache.http.legacy'
}
ApacheHttp Clientはv23 sdkで削除されました。あなたはOkHttpのようなHttpURLConnectionまたはサードパーティのHttpクライアントを使うことができます。
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'
}
それは私のために働いています。あなたに役立つことを願っています。
単にこれを使用してください: -
Android {
.
.
.
useLibrary 'org.Apache.http.legacy'
.
.
.
}
1行だけ追加する必要があります
useLibrary 'org.Apache.http.legacy'
例えばbuild.gradle(Module:app)に入ります。
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'
}
前述のように、org.Apache.http.client.HttpClient
は以下ではサポートされなくなりました。
SDK(APIレベル)#23.
あなたはJava.net.HttpURLConnection
を使わなければなりません。
HttpURLConnection
を使用するときにコード(および寿命)をより簡単にしたい場合は、このクラスのWrapper
を使用して、例えばHTTP PUT
のようにGET
を使用してPOST
、PUT
およびJSON
で簡単な操作を実行できます。
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レベル8専用です。 ここ をご覧ください。
あなたのコードを楽しんでください:)
もう1つの方法は、 httpclient.jar fileがある場合、これを実行できます。
プロジェクトの「libsフォルダ」に.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')
}
これら2行を依存関係の下に追加します。
compile 'org.Apache.httpcomponents:httpcore:4.4.1'
compile 'org.Apache.httpcomponents:httpclient:4.5'
それから
useLibrary 'org.Apache.http.legacy'
androidの下で
エラー:(30、0)Gradle DSLメソッドが見つかりません: 'classpath()'考えられる原因: