HttpClient 不会在 Android Studio 中导入
HttpClient won't import in Android Studio
我在 Android Studio 中编写了一个简单的 class:
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'
}
不管有没有最后的编译行,错误都是一样的。我错过了什么?
sdk 23 不再支持 HttpClient
。您必须使用 URLConnection
或降级到 sdk 22 (compile 'com.android.support:appcompat-v7:22.2.0'
)
如果您需要 sdk 23,请将其添加到您的 gradle:
android {
useLibrary 'org.apache.http.legacy'
}
您也可以尝试下载并包含 HttpClient jar directly into your project or use OkHttp 而不是
您的项目中有哪个 API 目标?AndroidHttpClient
仅适用于 API 级别 8 <。
请查看 here
享受你的代码:)
ApacheHttp 客户端在 v23 sdk 中被移除。您可以使用 HttpURLConnection 或像 OkHttp 这样的第三方 Http 客户端。
参考:https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client
HttpClient 在 API 级别 22 中被弃用并在 API 级别 23 中删除。如果必须,您仍然可以在 API 级别 23 及以后的版本中使用它,但是最好移动到支持的方法来处理 HTTP。因此,如果您使用 23 进行编译,请将其添加到您的 build.gradle:
android {
useLibrary 'org.apache.http.legacy'
}
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 -> Project -> app -> libs
,然后把罐子放在那里。
3-在build.gradle(模块:app)中添加
compile fileTree(dir: 'libs', include: ['*.jar'])
在
dependency {
}
4- 在 java class 添加这些导入:
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;
要为 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/
}
...
}
来自 Android 工作室的关于 gradle 更新的通知:
模块特定 build.gradle - /app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
...
useLibrary 'org.apache.http.legacy'
...
}
在 API 22 中,它们已被弃用,在 API 23 中,它们被完全删除,如果你不需要新添加的所有花哨的东西,一个简单的解决方法是简单地使用来自 apache 的 .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
您可以简单地将其添加到 Gradle 依赖项中:
compile "org.apache.httpcomponents:httpcore:4.3.2"
TejaDroid 在下面的回答 link 帮助了我。
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'
...
}
Another way is if you have httpclient.jar file then you can do
this :
将您的 .jar 文件粘贴到项目的 "libs folder" 中。然后在 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')
}
试试这个
为我工作
将此依赖项添加到您的 build.gradle 文件
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Android 6.0(API 级别 23)版本删除了对 Apache HTTP 客户端的支持。因此你不能直接在API23中使用这个库。但是有一种方法可以使用它。在您的 build.gradle 文件中添加 useLibrary ‘org.apache.http.legacy’,如下所示-
android {
useLibrary 'org.apache.http.legacy'
}
如果这不起作用,您可以应用以下 hack-
– 将 Android SDK 目录的 /platforms/android-23/optional 路径中的 org.apache.http.legacy.jar 复制到项目的 app/libs 文件夹中。
– 现在在 build.gradle 文件的 dependencies{} 部分添加编译文件(‘libs/org.apache.http.legacy.jar’)。
只需使用这个:-
android {
.
.
.
useLibrary 'org.apache.http.legacy'
.
.
.
}
sdk 23 不再支持 HttpClient。Android 6.0(API 级别 23)版本删除了对 Apache HTTP 客户端的支持。
你必须使用
android {
useLibrary 'org.apache.http.legacy'
.
.
.
并在您的依赖项中添加以下代码片段:
//web-service的http最终解决方案(包括文件上传)
compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
它也会在您使用 MultipartEntity 进行 文件上传.
时帮助您
我认为根据您拥有的 Android Studio 版本,更新您的 android 工作室也很重要,我听从了大家的建议也变得很沮丧,但没有运气,直到我不得不将我的 android 版本从 1.3 升级到 1.5,错误像魔法一样消失了。
SDK 23 和 23+ 不支持 HttpClient。
如果您需要使用 sdk 23,请将以下代码添加到您的 gradle:
android {
useLibrary 'org.apache.http.legacy'
}
它对我有用。希望对你有用。
如果您需要 sdk 23,请将其添加到您的 gradle:
android {
useLibrary 'org.apache.http.legacy'
}
在dependencies下添加这两行
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
然后
useLibrary 'org.apache.http.legacy'
下android
您只需添加一行
useLibrary 'org.apache.http.legacy'
变成build.gradle(模块: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
时简化您的代码(和生活),这里有一个 class 的 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 包装文件 构建文件可能缺少 Gradle 插件。
应用 Gradle 插件
如果你想导入一些 class 比如:
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'
}
对于 android API 28 岁及以上
在 Manifest.xml 应用程序标签内
<application
.
.
.
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
自 2021 年 4 月起,您可以使用以下内容:
在您的应用 gradle 中,在 'dependencies { ' 下添加以下内容:
implementation 'org.apache.httpcomponents:httpcore:4.4.10'
implementation 'org.apache.httpcomponents:httpclient:4.5.6'
在您的 Java activity 中,添加以下导入:
import org.apache.http.client.HttpClient;
然后您应该能够将 HttpClient 添加到您的方法中。
我在 Android Studio 中编写了一个简单的 class:
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
。您必须使用 URLConnection
或降级到 sdk 22 (compile 'com.android.support:appcompat-v7:22.2.0'
)
如果您需要 sdk 23,请将其添加到您的 gradle:
android {
useLibrary 'org.apache.http.legacy'
}
您也可以尝试下载并包含 HttpClient jar directly into your project or use OkHttp 而不是
您的项目中有哪个 API 目标?AndroidHttpClient
仅适用于 API 级别 8 <。
请查看 here
享受你的代码:)
ApacheHttp 客户端在 v23 sdk 中被移除。您可以使用 HttpURLConnection 或像 OkHttp 这样的第三方 Http 客户端。
参考:https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client
HttpClient 在 API 级别 22 中被弃用并在 API 级别 23 中删除。如果必须,您仍然可以在 API 级别 23 及以后的版本中使用它,但是最好移动到支持的方法来处理 HTTP。因此,如果您使用 23 进行编译,请将其添加到您的 build.gradle:
android {
useLibrary 'org.apache.http.legacy'
}
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 -> Project -> app -> libs
,然后把罐子放在那里。
3-在build.gradle(模块:app)中添加
compile fileTree(dir: 'libs', include: ['*.jar'])
在
dependency {
}
4- 在 java class 添加这些导入:
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;
要为 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/
}
...
}
来自 Android 工作室的关于 gradle 更新的通知:
模块特定 build.gradle - /app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
...
useLibrary 'org.apache.http.legacy'
...
}
在 API 22 中,它们已被弃用,在 API 23 中,它们被完全删除,如果你不需要新添加的所有花哨的东西,一个简单的解决方法是简单地使用来自 apache 的 .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
您可以简单地将其添加到 Gradle 依赖项中:
compile "org.apache.httpcomponents:httpcore:4.3.2"
TejaDroid 在下面的回答 link 帮助了我。
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'
...
}
Another way is if you have httpclient.jar file then you can do this :
将您的 .jar 文件粘贴到项目的 "libs folder" 中。然后在 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')
}
试试这个 为我工作 将此依赖项添加到您的 build.gradle 文件
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Android 6.0(API 级别 23)版本删除了对 Apache HTTP 客户端的支持。因此你不能直接在API23中使用这个库。但是有一种方法可以使用它。在您的 build.gradle 文件中添加 useLibrary ‘org.apache.http.legacy’,如下所示-
android {
useLibrary 'org.apache.http.legacy'
}
如果这不起作用,您可以应用以下 hack-
– 将 Android SDK 目录的 /platforms/android-23/optional 路径中的 org.apache.http.legacy.jar 复制到项目的 app/libs 文件夹中。
– 现在在 build.gradle 文件的 dependencies{} 部分添加编译文件(‘libs/org.apache.http.legacy.jar’)。
只需使用这个:-
android {
.
.
.
useLibrary 'org.apache.http.legacy'
.
.
.
}
sdk 23 不再支持 HttpClient。Android 6.0(API 级别 23)版本删除了对 Apache HTTP 客户端的支持。 你必须使用
android {
useLibrary 'org.apache.http.legacy'
.
.
.
并在您的依赖项中添加以下代码片段:
//web-service的http最终解决方案(包括文件上传)
compile('org.apache.httpcomponents:httpmime:4.3.6') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
它也会在您使用 MultipartEntity 进行 文件上传.
时帮助您我认为根据您拥有的 Android Studio 版本,更新您的 android 工作室也很重要,我听从了大家的建议也变得很沮丧,但没有运气,直到我不得不将我的 android 版本从 1.3 升级到 1.5,错误像魔法一样消失了。
SDK 23 和 23+ 不支持 HttpClient。
如果您需要使用 sdk 23,请将以下代码添加到您的 gradle:
android {
useLibrary 'org.apache.http.legacy'
}
它对我有用。希望对你有用。
如果您需要 sdk 23,请将其添加到您的 gradle:
android {
useLibrary 'org.apache.http.legacy'
}
在dependencies下添加这两行
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
然后
useLibrary 'org.apache.http.legacy'
下android
您只需添加一行
useLibrary 'org.apache.http.legacy'
变成build.gradle(模块: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
时简化您的代码(和生活),这里有一个 class 的 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()' 可能的原因:
如果你想导入一些 class 比如:
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'
}
对于 android API 28 岁及以上 在 Manifest.xml 应用程序标签内
<application
.
.
.
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
自 2021 年 4 月起,您可以使用以下内容:
在您的应用 gradle 中,在 'dependencies { ' 下添加以下内容:
implementation 'org.apache.httpcomponents:httpcore:4.4.10'
implementation 'org.apache.httpcomponents:httpclient:4.5.6'
在您的 Java activity 中,添加以下导入:
import org.apache.http.client.HttpClient;
然后您应该能够将 HttpClient 添加到您的方法中。