java.net.URLConnection在这里经常询问使用情况,Oracle教程对此非常简洁.
该教程基本上只显示了如何触发GET请求并读取响应.它没有解释如何使用它来执行POST请求,设置请求标头,读取响应标头,处理cookie,提交HTML表单,上传文件等.
那么,我如何使用java.net.URLConnection触发和处理"高级"HTTP请求?
如前所述这里,Android的M将不支持的Apache HTTP API.文档声明:
请改用HttpURLConnection类.
要么
要继续使用Apache HTTP API,必须首先在build.gradle文件中声明以下编译时依赖项:
android {useLibrary'org.apache.http.legacy'}
我已经将我项目的大部分HttpClient用法转换为HttpURLConnection,但是,我仍然需要在一些领域使用HttpClient.因此,我试图将'org.apache.http.legacy'声明为编译时依赖项,但在build.gradle中出现错误:
找不到Gradle DSL方法:'useLibrary()'
我的问题是:如何在项目中将'org.apache.http.legacy'声明为编译时依赖项?
任何帮助深表感谢.谢谢
apache android httpclient build.gradle android-6.0-marshmallow
在Android Marshmallow上,Google完全取消了对Apache HTTP客户端的支持(链接在这里),因为与替代方案相比,它没有良好的性能.
这可能也是Android Marshmallow上如此多应用程序崩溃的原因.
通过将此行添加到gradle文件,Google允许您仍然使用此API,而不是内置的API:
useLibrary 'org.apache.http.legacy'
Run Code Online (Sandbox Code Playgroud)
所以,这就是我做的:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Run Code Online (Sandbox Code Playgroud)
和:
android {
compileSdkVersion 'android-MNC'
buildToolsVersion "23.0.0 rc3"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.example.user.androidmtest"
minSdkVersion 'MNC'
targetSdkVersion 'MNC'
versionCode 1
versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)
当我尝试它时,它编译得很好(没有显示错误,我可以运行概念验证应用程序,因为它没有任何特殊代码),但当我尝试使用我知道的一些类时是旧API的一部分(如"HttpClient"类),我看到它不允许我这样做.
我知道不建议使用此解决方案,但我们必须让应用程序准备好至少暂时在那里工作,直到我们100%完成Android Marshmallow应该改变的所有事情,我们不希望出现意外情况.崩溃的形式.
这是一个截图:
它为什么会发生?我使用得当吗?
编辑:这里报告了这个问题:
我已将此行添加到build.gradle中
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5'
Run Code Online (Sandbox Code Playgroud)
我想在我的代码中使用MultipartEntityBuilder.但Android Studio不会将库添加到我的代码中.谁能帮我这个?
android gradle apache-httpcomponents multipartentity android-studio
目前我使用HttpClient,HttpPost将数据发送到我的PHP server从Android app,但所有这些方法是在API 22弃用,在API 23取出,那么有什么替代方案呢?
我到处搜索,但没有找到任何东西.
正如我们所知,Apache HTTP Client已在API 23中删除
但是,Volley库目前仍然使用Apache的库如
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.cookie.DateUtils;
Run Code Online (Sandbox Code Playgroud)
我测试了2个项目:一个用于compileSdkVersion 22,另一个用于compileSdkVersion 23获得2个截图:
compileSdkVersion 22
compileSdkVersion 23
我有两个问题:
Apache在运行时使用该库,他们是在API22或更低版本中找到的?Apache图书馆吗?如果没有,当Apache我的图书馆完全删除并且不受支持时,我现在的项目是否仍会继续使用?也许我的英语不太清楚,但希望你能理解我的问题.
任何解释将不胜感激.
更新:
从@ random的评论中,我使用谷歌的官方Volley库创建了一个新的API23项目(我的意思git clone https://android.googlesource.com/platform/frameworks/volley是谷歌建议的这里),而不是compile 'com.mcxiaoke.volley:library:1.0.17'在build.gradle文件中使用.是的,在构建项目时因缺少Apache库而出错.必须按文档添加useLibrary 'org.apache.http.legacy'到build.gradle文件中.
第二次更新:
我刚刚定制了谷歌的排球(作为我项目中的一个模块),删除了Apache库.请转到我的GitHub示例项目供您参考.但请注意,它尚未针对所有情况进行全面测试,并且我仅测试了02个简单案例:GET并且POST我的Web服务请求是ASP.NET Web …
apache android httpresponse android-volley android-api-levels
我ThreadSafeClientConnManager在我的应用程序中使用了一些其他类,如HttpStatus,SSLSocketFactory,PlainSocketFactory,SchemeRegistry等.但是从API 22开始,它们都被标记为已弃用,并且我没有看到任何明确指示替换的内容他们.文档jas说"请使用openConnection().请访问此网页以获取更多详细信息",这并不能说清楚该怎么做.openConnection()只是指向URL类,而网页链接是从2011年开始讨论Apache类和之间的差异HttpUtrlConnection.那么,这是否意味着HttpUrlConnection从现在开始我们应该是useign 类?如果是这种情况,我认为它不是线程安全的(这就是我使用它的原因ThreadSafeClientConnManager).
有人可以帮我澄清一下吗?
我正在使用HTTPclientdatatransfer 开发一个应用程序.由于HTTPClient不推荐使用,我想将网络部分移植到URLConnection.
ConectionHttpClient.java
package conexao;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
public class ConexaoHttpClient {
public static final int HTTP_TIMEOUT = 30 * 1000;
private static HttpClient httpClient;
private static HttpClient getHttpClient(){
if (httpClient == null){
httpClient = new DefaultHttpClient();
final HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, HTTP_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParams, HTTP_TIMEOUT);
ConnManagerParams.setTimeout(httpParams, …Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,它说:org.apache.http.client.httpclient已被弃用.经过一些研究,我发现Android已经在API 22中弃用了它.我在论坛中搜索并尝试:"应用程序已停止",搜索谷歌:"应用程序已经停止".所以我不知道该怎么做.我希望你们能帮助我.那么这是我的代码:
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.URL.com");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success");
// Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection" + e.toString());
Toast.makeText(getApplicationContext(), "Connection fail", Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
编辑:
我正在尝试获取我的Mysql数据库的一些数据.你知道一个关于如何完成这个的好教程吗?请告诉我.
我正在创建一个Android应用程序,我通过HttpClient将数据从Android应用程序发送到servlet.我使用HttpPost方法.
我在Android开发者网站上读到Apache HttpClient库在Android Froyo 2.2中有一些错误,毕竟使用HttpUrlConnection而不是HttpPost是一个好习惯.所以我想将我的HttpPost代码转换为HttpUrlConnectio,但不知道如何.
我在这里发布我的Android代码以及servlet代码
Android代码
private String postData(String valueIWantToSend[])
{
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1",valueIWantToSend[0]));
nameValuePairs.add(new BasicNameValuePair("param2", valueIWantToSend[1]));
nameValuePairs.add(new BasicNameValuePair("param3", valueIWantToSend[2]));
nameValuePairs.add(new BasicNameValuePair("param4", valueIWantToSend[3]));
nameValuePairs.add(new BasicNameValuePair("param5", valueIWantToSend[4]));
nameValuePairs.add(new BasicNameValuePair("param6", valueIWantToSend[5]));
nameValuePairs.add(new BasicNameValuePair("param7", valueIWantToSend[6]));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
/* execute */
HttpResponse response = httpclient.execute(httppost);
HttpEntity rp = response.getEntity();
//origresponseText=readContent(response);
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch …Run Code Online (Sandbox Code Playgroud) java android servlets httpurlconnection apache-httpclient-4.x
我试图用参数做一些http请求.目前我正在使用
private List<NameValuePair> mParams = new ArrayList<NameValuePair>();
private DefaultHttpClient mHttpClient;
private HttpPost mHttpPost;
Run Code Online (Sandbox Code Playgroud)
这些用于发出http请求,它工作正常.但问题是android studio显示所有这些3的弃用警告.我尝试使用,
HttpClientBuilder.create().build();但android工作室无法导入库HttpClientBuilder
我尝试下载并添加 此jar依赖 但仍然无法正常工作.这是我的代码
mHttpClient = new DefaultHttpClient();
mHttpPost = new HttpPost(url);
mParams.add(new BasicNameValuePair("key", value));
mHttpPost.setEntity(new UrlEncodedFormEntity(mParams));
Run Code Online (Sandbox Code Playgroud)
所有这些行都显示了已弃用的警告,这是另一种方法吗?
android ×10
java ×6
apache ×2
http ×2
api ×1
build.gradle ×1
deprecated ×1
eclipse ×1
gradle ×1
http-post ×1
httpclient ×1
httprequest ×1
httpresponse ×1
php ×1
servlets ×1