当前位置:首页 » 安卓系统 » androidhttpasync

androidhttpasync

发布时间: 2022-09-05 00:50:29

㈠ android-async-http 支持https吗

这几天由于项目要求将http转换成https请求,要求不做证书验证。而我使用的是loopj的开源库android-async-http来完成服务器请求,但是此库并未有相关https的示例,故自己动手丰衣足食。
经过一番摸索,现记录如下:

封装了一个httpclient帮助类,以此获取一个DefaultHttpClient的示例对象。

[java] view
plainprint?

importjava.io.IOException;

importjava.net.Socket;

importjava.net.UnknownHostException;

importjava.security.KeyManagementException;

importjava.security.KeyStore;

importjava.security.KeyStoreException;

importjava.security.NoSuchAlgorithmException;

importjava.security.UnrecoverableKeyException;

importjavax.net.ssl.SSLContext;

importjavax.net.ssl.TrustManager;

importjavax.net.ssl.X509TrustManager;

importorg.apache.http.HttpVersion;

importorg.apache.http.conn.ClientConnectionManager;

importorg.apache.http.conn.params.ConnManagerParams;

importorg.apache.http.conn.params.ConnPerRouteBean;

importorg.apache.http.conn.scheme.PlainSocketFactory;

importorg.apache.http.conn.scheme.Scheme;

importorg.apache.http.conn.scheme.SchemeRegistry;

importorg.apache.http.conn.ssl.SSLSocketFactory;

importorg.apache.http.impl.client.DefaultHttpClient;

importorg.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;

importorg.apache.http.params.BasicHttpParams;

importorg.apache.http.params.HttpConnectionParams;

importorg.apache.http.params.HttpProtocolParams;

/**

*@authorAdministrator

*注意所导入的包,故将引入的包也贴上,防止错误。

*/

publicclassHttpClientHelper{

;

="1.1";

/**http请求最大并发连接数*/

privatestaticfinalintDEFAULT_MAX_CONNECTIONS=10;

/**超时时间,默认10秒*/

privatestaticfinalintDEFAULT_SOCKET_TIMEOUT=30*1000;

/**默认的套接字缓冲区大小*/

privatestaticfinalintDEFAULT_SOCKET_BUFFER_SIZE=8192;

=DEFAULT_MAX_CONNECTIONS;

privatestaticintsocketTimeout=DEFAULT_SOCKET_TIMEOUT;

privateHttpClientHelper(){

}

(){

if(null==httpClient){

//初始化工作

try{

KeyStoretrustStore=KeyStore.getInstance(KeyStore

.getDefaultType());

trustStore.load(null,null);

BasicHttpParamshttpParams=newBasicHttpParams();

ConnManagerParams.setTimeout(httpParams,socketTimeout);

ConnManagerParams.setMaxConnectionsPerRoute(httpParams,

newConnPerRouteBean(maxConnections));

ConnManagerParams.setMaxTotalConnections(httpParams,

DEFAULT_MAX_CONNECTIONS);

HttpConnectionParams.setSoTimeout(httpParams,socketTimeout);

HttpConnectionParams.setConnectionTimeout(httpParams,

socketTimeout);

HttpConnectionParams.setTcpNoDelay(httpParams,true);

HttpConnectionParams.setSocketBufferSize(httpParams,

DEFAULT_SOCKET_BUFFER_SIZE);

HttpProtocolParams.setVersion(httpParams,HttpVersion.HTTP_1_1);

HttpProtocolParams.setUserAgent(httpParams,String

.format("thinkandroid/%s(http://www.thinkandroid.cn)",

VERSION));

//设置https支持

SSLSocketFactorysf=newSSLSocketFactoryEx(trustStore);

sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);//允许所有主机的验证

SchemeRegistryschReg=newSchemeRegistry();

schReg.register(newScheme("http",PlainSocketFactory

.getSocketFactory(),80));

schReg.register(newScheme("https",sf,443));

schReg.register(newScheme("https",sf,8443));

=(

httpParams,schReg);

httpClient=newDefaultHttpClient(conManager,httpParams);

}catch(Exceptione){

e.printStackTrace();

returnnewDefaultHttpClient();

}

}

returnhttpClient;

}

}

然后在开源库的AsyncHttpClient类中将原来的
httpClient = new DefaultHttpClient(cm, httpParams)替换成httpClient =
HttpClientHelper.getHttpClient()即可。

这个封装类大家可以拿去用的。只要是不做证书验证。如果需要加载证书验证的,对客户端来说比较简单。可以去google下。

转载

㈡ android-async-http 怎么支持patch方法

先来看一下最基本的用法

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});

通过AsyncHttpClient类的实例就可以执行网络请求,包括get、put、post、head、delete。并指定一个ResponseHandlerInterface的实例接收请求结果。(onSuccess参数不对,此处只说明基本用法,详细参数看源码)

主要类介绍

AsyncHttpRequest

继承自Runnabler,被submit至线程池执行网络请求并发送start,success等消息

AsyncHttpResponseHandler

接收请求结果,一般重写onSuccess及onFailure接收请求成功或失败的消息,还有onStart,onFinish等消息

TextHttpResponseHandler

继承自AsyncHttpResponseHandler,只是重写了AsyncHttpResponseHandler的onSuccess和onFailure方法,将请求结果由byte数组转换为String

JsonHttpResponseHandler

继承自TextHttpResponseHandler,同样是重写onSuccess和onFailure方法,将请求结果由String转换为JSONObject或JSONArray

BaseJsonHttpResponseHandler

继承自TextHttpResponseHandler,是一个泛型类,提供了parseResponse方法,子类需要提供实现,将请求结果解析成需要的类型,子类可以灵活地使用解析方法,可以直接原始解析,使用gson等。

RequestParams

请求参数,可以添加普通的字符串参数,并可添加File,InputStream上传文件

AsyncHttpClient

核心类,使用HttpClient执行网络请求,提供了get,put,post,delete,head等请求方法,使用起来很简单,只需以url及RequestParams调用相应的方法即可,还可以选择性地传入Context,用于取消Content相关的请求,同时必须提供ResponseHandlerInterface(AsyncHttpResponseHandler继承自ResponseHandlerInterface)的实现类,一般为AsyncHttpResponseHandler的子类,AsyncHttpClient内部有一个线程池,当使用AsyncHttpClient执行网络请求时,最终都会调用sendRequest方法,在这个方法内部将请求参数封装成AsyncHttpRequest(继承自Runnable)交由内部的线程池执行。

SyncHttpClient

继承自AsyncHttpClient,同步执行网络请求,AsyncHttpClient把请求封装成AsyncHttpRequest后提交至线程池,SyncHttpClient把请求封装成AsyncHttpRequest后直接调用它的run方法。

㈢ android-async-http 怎么用

examples:里面有简单的例子
library:里面存放的是android-async-http开源项目的源码(方法一:可以把library\src\main\Java文件下面的文件拷贝到,你应用的src下也可以直接使用)
releases:里面存放的是各个版本的jar文件,(方法二:只需把最新的jar文件拷贝到你应用的libs目录下即可.)
samples:里面存放的也是例子(可供参考)
备注:方法一和方法二只能采用其中之一,建议采用方法二
2.2使用方法
Import the http package.
import com.loopj.android.http.*;

Create a new AsyncHttpClient instance and make a request:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});

Adding GET/POST Parameters with RequestParams

The RequestParams class is used to add optional GET or POST parameters to your requests.RequestParams can be built and constructed in various ways:
Create empty RequestParams and immediately add some parameters:
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");

Create RequestParams for a single parameter:
RequestParams params = new RequestParams("single", "value");

Create RequestParams from an existing Map of key/value strings:
HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("key", "value");
RequestParams params = new RequestParams(paramMap);

See the RequestParams Javadoc for more information.
Add an InputStream to the RequestParams to upload:
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put("secret_passwords", myInputStream, "passwords.txt");

Add a File object to the RequestParams to upload:
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}

Add a byte array to the RequestParams to upload:
byte[] myByteArray = blah;
RequestParams params = new RequestParams();
params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");

See the RequestParams Javadoc for more information.
Downloading Binary Data with BinaryHttpResponseHandler
The BinaryHttpResponseHandler class can be used to fetch binary data such as images and other files. For example:
AsyncHttpClient client = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
client.get("http://example.com/file.png", new BinaryHttpResponseHandler(allowedContentTypes) {
@Override
public void onSuccess(byte[] fileData) {
// Do something with the file
}
});

㈣ 如何添加android-async-http源码

简单来说你只需要3步,

1. 创建一个AsyncHttpClient;

2. (可选的)通过RequestParams对象设置请求参数;

3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类

,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response
handler,你一般不需要自己创建一个。

来看看代码如何写:

AsyncHttpClient client = new AsyncHttpClient();

client.get("http://www.google.com", new AsyncHttpResponseHandler() {

@Override

public void onStart() {

// called before request is started

}

@Override

public void onSuccess(int statusCode, Header[] headers, byte[] response)
{

// called when response HTTP status is "200 OK"

}

@Override

public void onFailure(int statusCode, Header[] headers, byte[]
errorResponse, Throwable e) {

// called when response HTTP status is "4XX" (eg. 401, 403, 404)

}

@Override

public void onRetry(int retryNo) {

// called when request is retried

}

});

是不是很简洁,有没有被震撼到?反正我自己第一次看到的时候有种相见恨晚的感觉,这简直就是我日思夜想的方式啊!这里你只需要通过

匿名内部类的方式实现AsyncHttpResponseHandler,而且更棒的是你只需要override感兴趣的方法,比如一般都是onSuccess和onFailure。

这个版本的get方法没有为请求传递任何参数,当然你也可以通过RequestParams来传递各种参数,如下:

AsyncHttpClient client = new AsyncHttpClient();

RequestParams params = new RequestParams();

params.put("key", "value");

params.put("more", "data");

client.get("http://www.google.com", params, new

AsyncHttpResponseHandler() {

@Override

public void onSuccess(int statusCode, Header[] headers, byte[] response)
{

System.out.println(response);

}

@Override

public void onFailure(int statusCode, Header[] headers, byte[]
responseBody, Throwable error) {

Log.d("ERROR", error);

}

}

);

以上的例子是返回的response直接是原生字节流的情况,如果你需要把返回的结果当一个String对待,这时只需要匿名实现一个

TextHttpResponseHandler就行,其继承自AsyncHttpResponse,并将原生的字节流根据指定的encoding转化成了string对象,

代码如下:

AsyncHttpClient client = new AsyncHttpClient();

RequestParams params = new RequestParams();

params.put("key", "value");

params.put("more", "data");

client.get("http://www.google.com", params, new

TextHttpResponseHandler() {

@Override

public void onSuccess(int statusCode, Header[] headers, String response)
{

System.out.println(response);

}

@Override

public void onFailure(int statusCode, Header[] headers, String
responseBody, Throwable error) {

Log.d("ERROR", error);

}

}

);

同样的方式,你可以发送json请求,代码如下:

String url = "https://ajax.googleapis.com/ajax/services/search/images";

AsyncHttpClient client = new AsyncHttpClient();

RequestParams params = new RequestParams();

params.put("q", "android");

params.put("rsz", "8");

client.get(url, params, new JsonHttpResponseHandler() {

@Override

public void onSuccess(int statusCode, Header[] headers, JSONObject
response) {

// Handle resulting parsed JSON response here

}

@Override

public void onSuccess(int statusCode, Header[] headers, JSONArray response)
{

// Handle resulting parsed JSON response here

}

});

看到了没,返回的response已经自动转化成JSONObject了,当然也支持JSONArray类型,override你需要的那个版本就行。

有了AsyncHttpClient,要实现这些功能是不是很简单呢?当然这里只是很初级的介绍和使用,剩下的还需要开发者自己参考官方

文档、源码(官方甚至提供了一个Sample使用的集合),在实际项目中实践。最后,强烈建议大家使用,是时候和冗长乏味的代码说

㈤ 怎么使用android-async-http给后台上传json数据

一、在JavaEE项目中搭建环境
1. 导入相关jar包

2. 搭建相关的包和类

3.类中的方法简单实现
User:
声明以下属性,并实现无参构造器和有参构造器,以及各自的get和set方法

UserDao:

UserDaoImpl:

JsonServlet:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 来自于数据库
UserDao Impl = new UserDaoImpl();
List entities = Impl.findAll();
// 把List集合转换成一个json的数据格式
JSONArray jsonArray = JSONArray.fromObject(entities);

response.setContentType("application/json");// 响应类型 json的数据
response.getWriter().write(jsonArray.toString());
response.getWriter().close();
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

附上出处链接:http://www.2cto.com/kf/201405/304410.html

㈥ 框架android-async-http 服务器怎么接受文件

在服务端,比如servlet,从requset里拿到inputStream,从流里面读取,然后生成文件

㈦ okhttp,retrofit,android-async-http,volley应该选择哪一个

个人认为okhttp是android平台最好的网络库。

volley是一个简单的异步http库,仅此而已。缺点是不支持同步,这点会限制开发模式;不能post大数据,所以不适合用来上传文件。

android-async-http,与volley一样是异步网络库。但volley是封装的httpUrlConnection,它是封装的httpClient,而android平台不推荐用HttpClient了,所以这个库已经不适合android平台了。

okhttp是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和volley一样实现了http协议的缓存。picasso就是利用okhttp的缓存机制实现其文件缓存,实现的很优雅,很正确,反例就是UIL(universal image loader),自己做的文件缓存,而且不遵守http缓存机制。

retrofit与picasso一样都是在okhttp基础之上做的封装,项目中可以直接用了。

㈧ android-async-http访问https的地址,怎么使用

简单来说你只需要3步,

1/ajax/services/search/images";

AsyncHttpClient client = new AsyncHttpClient();

RequestParams params = new RequestParams();

params.put("q", "android");

params.put("rsz", "8");

client.get(url, params, new JsonHttpResponseHandler() {

@Override

public void onSuccess(int statusCode, Header[] headers, JSONObject
response) {

// Handle resulting parsed JSON response here

}

@Override

public void onSuccess(int statusCode, Header[] headers, JSONArray response)
{

// Handle resulting parsed JSON response here

}

});

看到了没,返回的response已经自动转化成JSONObject了,当然也支持JSONArray类型,override你需要的那个版本就行。

有了AsyncHttpClient,要实现这些功能是不是很简单呢?当然这里只是很初级的介绍和使用,剩下的还需要开发者自己参考官方

文档、源码(官方甚至提供了一个Sample使用的集合),在实际项目中实践。最后,强烈建议大家使用,是时候和冗长乏味的代码说

㈨ 如何处理Android-Async-Http连接超时的问题

一般网络超时后,可以尝试重新连接,或者给出错误提示。
Android-Async-Http第三方的网络请求框架,内部已经默认实现了,二次请求网络,就是在网络错误后再请求一次服务器。所以可以直接给出错误提示,让用户检查网络。

㈩ 安卓ion与android-async-http哪个框架更好用

android-async-http 开源框架可以使我们轻松地获取网络数据或者向服务器发送数据,最关键的是,它是异步框架,在底层使用线程池处理并发请求,效率很高,使用又特别简单。
以往我们在安卓上做项目,比如要下载很多图片、网页或者其他的资源,多数开发者会选择一个线程一个下载任务这种模型,因为安卓自带的 AndroidHttpClient 或者 java 带的 java.net.URL ,默认都是阻塞式操作。这种模型效率不高,对并发要求高的 APP 来讲,并不适用。有的人会选择使用 nio 自己实现,代码复杂度又很高。
AsyncHttpClient 作为 android-async-http 框架的一个核心应用类,使用简单,可以处理文本、二进制等各种格式的 web 资源。下面提供一些代码来看如何使用:

public class Downloader {
public static AsyncHttpClient mHttpc = new AsyncHttpClient();
public static String TAG = "Downloader";

public void downloadText(String uri){
mHttpc.get(uri, null, new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String data){
Log.i(TAG, "downloaded, thread id " + Thread.currentThread().getId());
// TODO: do something on
}
@Override
public void onFailure(Throwable e, String data){
Log.i(TAG, "download failed.");
// TODO: error proceed

热点内容
国产服务器搭建ftp 发布:2025-01-11 21:27:33 浏览:917
电脑系统哪个好用配置 发布:2025-01-11 21:26:04 浏览:139
交换机配置中web配置是什么意思 发布:2025-01-11 21:12:07 浏览:409
物资数据库 发布:2025-01-11 21:00:24 浏览:854
javastop 发布:2025-01-11 21:00:20 浏览:31
机械手臂用什么编程 发布:2025-01-11 20:55:32 浏览:592
买钓箱要哪些配置就够了 发布:2025-01-11 20:24:23 浏览:510
防脚本取色 发布:2025-01-11 20:15:17 浏览:638
为什么庄周活动安卓没开始 发布:2025-01-11 20:14:23 浏览:462
我的世界花雨庭国际服服务器地址 发布:2025-01-11 20:13:27 浏览:719