文档章节

volley 使用方法

xiahuawuyu
 xiahuawuyu
发布于 2015/12/22 09:49
字数 819
阅读 64
收藏 0

1 Volley发送get请求:

public void getJson() {
	String url = "http://"+host+":8080/web/json.jsp?username=xjs&password=123456";
	mQueue.add(new JsonObjectRequest(Method.GET, url, null,
		new Listener() {
			@Override
			public void onResponse(JSONObject response) {
				Log.e(TAG, "response : " + response.toString());
			}
		}, new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error) {
				String err = error.getMessage();
				Log.e(TAG, "err : " + err);
			}
		}));
}

2 Volley发送post请求:

public void postJson() {
	String url = "http://"+host+":8080/web/json.jsp";
	StringRequest postRequest = new StringRequest(
			Request.Method.POST, 
			url,
			new Response.Listener() {
				@Override
				public void onResponse(String response) {
					// response
					Log.d("Response", response);
				}
			}, new Response.ErrorListener() {
				@Override
				public void onErrorResponse(VolleyError error) {
					// error
					Log.d("Error.Response", error.getMessage());
				}
			}) {
		@Override
		protected MapgetParams() {
			Mapparams = new HashMap();
			params.put("username", "xjs");
			params.put("password", "123456");
			return params;
		}
	};
	mQueue.add(postRequest);
}

3 Volley获取网络图片:

public void getImage() {
	String imageUrl = "http://"+host+":8080/web/image.jsp";
	NetworkImageView view = (NetworkImageView) findViewById(R.id.network_image_view);
	view.setDefaultImageResId(android.R.drawable.ic_menu_rotate); 
	view.setErrorImageResId(android.R.drawable.ic_delete); 
	view.setImageUrl(imageUrl, new ImageLoader(mQueue, new BitmapLruCache(1024 * 4)));
}

4 Volley发送Https请求,需要修改源码:

protected HttpURLConnection createConnection(URL url) throws IOException {
	if (url.toString().toLowerCase(Locale.CHINA).startsWith("https")) {
		HTTPSTrustManager.allowAllSSL();
	}
	return (HttpURLConnection) url.openConnection();
}
//HTTPSTrustManager.java:
public class HTTPSTrustManager implements X509TrustManager {
	private static TrustManager[] trustManagers;
	private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};
	@Override
	public void checkClientTrusted(
			java.security.cert.X509Certificate[] x509Certificates, String s)
			throws java.security.cert.CertificateException {
		// To change body of implemented methods use File | Settings | File
		// Templates.
	}
	@Override
	public void checkServerTrusted(
			java.security.cert.X509Certificate[] x509Certificates, String s)
			throws java.security.cert.CertificateException {
		// To change body of implemented methods use File | Settings | File
		// Templates.
	}
	public boolean isClientTrusted(X509Certificate[] chain) {
		return true;
	}
	public boolean isServerTrusted(X509Certificate[] chain) {
		return true;
	}
	@Override
	public X509Certificate[] getAcceptedIssuers() {
		return _AcceptedIssuers;
	}
	public static void allowAllSSL() {
		HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
			@Override
			public boolean verify(String arg0, SSLSession arg1) {
				// TODO Auto-generated method stub
				return true;
			}
		});
		SSLContext context = null;
		if (trustManagers == null) {
			trustManagers = new TrustManager[] { new HTTPSTrustManager() };
		}
		try {
			context = SSLContext.getInstance("TLS");
			context.init(null, trustManagers, new SecureRandom());
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (KeyManagementException e) {
			e.printStackTrace();
		}
		HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
	}
}

5 Volley获取服务端返回的cookie,需要修改源码:

@Override
public HttpResponse performRequest(Request> request,MapadditionalHeaders) 
	throws IOException,AuthFailureError {
	for (Entry> header : connection.getHeaderFields().entrySet()) {
	if (header.getKey() != null) {
		String key = header.getKey();
		Listvalues = header.getValue();
		if(key.equalsIgnoreCase("set-cookie")){
			StringBuilder cookieString = new StringBuilder();
			for(String value : values){
				cookieString.append(value).append("\n");//用\n作为分隔符,cookie中不应该有回车符号
			}
			cookieString.deleteCharAt(cookieString.length() - 1);
			Header h = new BasicHeader(header.getKey(), cookieString.toString());
			response.addHeader(h);
		}else{
			Header h = new BasicHeader(header.getKey(), values.get(0));
			response.addHeader(h);
		}
	}
}
}
//然后再request中重写parseNetworkResponse():
@Override
protected ResponseparseNetworkResponse(NetworkResponse response) {
	ResponsesuperResponse = super.parseNetworkResponse(response);
	MapresponseHeaders = response.headers;
	String rawCookies = responseHeaders.get("Set-Cookie");
	//服务端返回是 set-cookie:JSESSIONID=D90B58454550B4D37C4B66A76BF27B93; Path=/otn BIGipServerotn=2564030730.64545.0000; path=/
	String part1 = substring(rawCookies, "", ";");
	String part2 = substring(rawCookies, "\n", ";");
	//客户端需要的是 cookie:JSESSIONID=D90B58454550B4D37C4B66A76BF27B93; BIGipServerotn=2564030730.64545.0000;
	cookies = part1 + "; " + part2 + ";";
	return superResponse;
}

6 Volley发请求的时候上传cookie,在request中重写getHeaders():

@Override
public MapgetHeaders() throws AuthFailureError {
         if(cookies!= null && cookies.length() > 0){
                   HashMapheaders = newHashMap();
                   headers.put("Cookie",cookies);
                   returnheaders;
         }
         returnsuper.getHeaders();
}

7 Volley自定义request:

public class ByteArrayRequest extends Request{
	private final ListenermListener;
	public ByteArrayRequest(int method, String url, Listenerlistener, ErrorListener errlistener) {
		super(method, url, errlistener);
		mListener = listener;
	}
	@Override
	protected ResponseparseNetworkResponse(NetworkResponse response) {
		if(response == null){
			return null;
		}
		if(response.statusCode != HttpStatus.SC_OK){
			return null;
		}
		byte[] bytes = response.data;
		return Response.success(bytes, null);
	}
	@Override
	protected void deliverResponse(byte[] response) {
		if(mListener != null){
			mListener.onResponse(response);
		}
	}
}

8 Volley设置请求超时时间:

@Override
public RetryPolicy getRetryPolicy() { 
         RetryPolicyretryPolicy = new DefaultRetryPolicy(5000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
         returnretryPolicy; 
}

附一个登陆铁道部12306的例子,源码在:http://download.csdn.net/download/goldenfish1919/7029907

Ps:我在测试的时候用了本地的一个tomcat,一块打包放在了asserts下面。

参考:

http://blog.csdn.net/xyz_lmn/article/details/12165391

http://blog.csdn.net/xyz_lmn/article/details/12746581

http://blog.csdn.net/xyz_lmn/article/details/12177005

http://www.itsalif.info/content/android-volley-tutorial-http-get-post-put

概述:http://blog.csdn.net/t12x3456/article/details/9221611

入门: http://blog.csdn.net/ttdevs/article/details/17566795

自定义request: http://blog.csdn.net/ttdevs/article/details/17586205

源码分析:http://blog.csdn.net/ttdevs/article/details/17764351

发送https请求:http://blog.csdn.net/llwdslal/article/details/18052723

构造cache:http://stackoverflow.com/questions/16682595/android-volley-imageloader-bitmaplrucache-parameter

解析服务端cookie:http://stackoverflow.com/questions/20702178/android-volley-access-http-response-header-fields,http://blog.csdn.net/hpb21/article/details/12163371

上传cookie:http://stackoverflow.com/questions/17049473/how-to-set-custom-header-in-volley-request

设置超时:http://stackoverflow.com/questions/17094718/android-volley-timeout

http://blog.csdn.net/dacainiao007/article/details/12617747,这里关于超时时间增长的因子的说法不准确,应该是当第一次连接超时以后,第二次超时时间会变为原来的多少倍,连接超时和读取超时设置为同一个数。

© 著作权归作者所有

xiahuawuyu
粉丝 104
博文 648
码字总数 713300
作品 0
浦东
技术主管
私信 提问
Volley网络请求框架简析——Android网络请求框架(三)

题记—— 人来到这个世界上,只有两件事情,生与死, 一件事完了,另一件事还急什么? 有缘而来,无缘而去, 识自本心,见自本性 不起妄缘,无心无为 自由自在,动静自如 冷暖自知,则是修行...

赵子龙
2016/07/02
109
0
Android 开源项目推荐之「网络请求哪家强」

网络请求这个话题基本是所有 App 开发都会遇到的,这也难怪之前很多人留言让我写写网络请求到底该怎么选择,今天就来说说网络请求到底哪家强! 1 原则 本篇说的网络请求专指 http 请求,在选...

oschina
2016/08/05
4.2K
16
Android 中判断网络连接和GPS是否可用及HTTPCLIENT使用

大家知道Google支持和发布的Android移动操作系统,主要是为了使其迅速占领移动互联网的市场份额,所谓移动互联网当然也是互联网了,凡是涉及互联网的任何软件任何程序都少不了联网模块的开发...

xztelecomlcs
2017/03/14
0
0
android中网络操作使用总结(http)

Android是作为智能手机的操作系统,我们开发的应用,大多数也都需要连接网络,通过网络发送数据、获取数据,因此作为一个应用开发者必须熟悉怎么进行网络访问与连接。通常android中进行网络连...

码农明明
2014/05/22
3K
6
ym—— Android网络框架Volley(体验篇)

Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp 他们各有优劣,之前个人则比较喜欢用and...

小近
2014/11/06
3.9K
4

没有更多内容

加载失败,请刷新页面

加载更多

Intellij IDEA神器那些让人爱不释手的小技巧

<h1>概述</h1> <hr /> <p>在2018年5月6日写了一篇介绍IntellIJ IDEA的文章,<a href="[https://blog.csdn.net/linsongbin1/article/details/80211919](https://blog.csdn.net/linsongbin1/ar......

xiaolyuh
9分钟前
4
0
Jquery结合CSS实现选项卡功能

先看效果图: 现在就让我们看看实现的过程,首先看看 html 代码: <div id="category" class="category boxshadow"> <ul class="nav"> <li> <a id="nvajquery" class="current" href="#jque......

前端老手
14分钟前
2
0
PHP学习记录整理

PHP 输出文本的基础指令:echo 和 print。 echo和print的区别 echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) echo 输出一个或者多个字符串。 print ...

半缘修道半缘君丶
23分钟前
2
0
胡哥一分钟课堂第0001期 - Hybrid App(混合开发APP)

前言 Hybrid APP 即混合开发APP,今天胡哥和大家一起认识Hybrid App。 目前APP的开发方式有三种:原生APP、Web App、Hybrid APP(混合开发APP) 一、原生APP 即IOS(Objective-C等)、Andri...

胡哥有话说
30分钟前
3
0
SpringBoot 集成ElasticSearch

一、ElasticSearch介绍 ElasticSearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源...

zw965
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部