万能的Volley
v1olley能干那些事?发送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);
}
}));
}
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 Map getParams() {
Map params = 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,Map additionalHeaders)
throws IOException,AuthFailureError {
for (Entry> header : connection.getHeaderFields().entrySet()) {
if (header.getKey() != null) {
String key = header.getKey();
List values = 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 Response parseNetworkResponse(NetworkResponse response) {
Response superResponse = super.parseNetworkResponse(response);
Map responseHeaders = 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){
HashMap headers = newHashMap();
headers.put("Cookie",cookies);
returnheaders;
}
returnsuper.getHeaders();
}
7 Volley自定义request:
public class ByteArrayRequest extends Request{
private final Listener mListener;
public ByteArrayRequest(int method, String url, Listener listener, ErrorListener errlistener) {
super(method, url, errlistener);
mListener = listener;
}
@Override
protected Response parseNetworkResponse(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;
}
转载:http://www.android100.org/html/201406/04/17036.html
关于图片加载:
RequestQueue mQueue = Volley.newRequestQueue(context);
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(ivAdvertise,
R.drawable.defaulto, R.drawable.error);//
imageLoader.get(head_img, listener, 200, 200);
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
// TODO Auto-generated method stub
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
// TODO Auto-generated method stub
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bm) {
// TODO Auto-generated method stub
mCache.put(url, bm);
}
}
//宽高 可不设 关于
NetworkDispatcher还没得及看 详见http://www.android100.org/html/201406/03/16240.html
万能的Volley的更多相关文章
- Volley手写属于自己的万能网络访问框架
用户在调用层(Activity或Service中),发起一个网络请求,该请求肯定包含url,请求参数(requestParameter),以及我们需要给调用层提供一个请求成功或失败以后回调监听的接口d ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- 从c#角度看万能密码SQL注入漏洞
以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- 快速Android开发系列网络篇之Volley
Volley是Google推出的一个网络请求库,已经被放到了Android源码中,地址在这里,先看使用方法 RequestQueue mRequestQueue = Volley.newRequest ...
- 打造android偷懒神器———ListView的万能适配器
如果你去做任何一个项目,我相信你都会跟我有一样的经历,最最普遍的就是列表显示ListView,当然,写N个自定义的适配器也是情理之中.虽说程序员本身就是搬砖,做这些枯燥无味的重复的事情也是理所当然,但 ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
- Android Volley
1.volley简单的介绍: Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络 得更快. Vollry 提供以下好处: 1.自动调度的网络请求. 2.多个并发的网络 ...
随机推荐
- 爆牙齿的 Web 标准面试题 【转藏】
<!DOCTYPE html> <html lang="zh-CN"><head> <meta http-equiv="cont ...
- javascript 封装 构造函数继承 非构造函数继承
1 封装 把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象 1.1 简单封装:var cat1 = { ...
- Update Statistics用法
Update Statistics语句的作用将创建的数据库表的有关统计信息更新到系统 sysmater的相关表中,以便查询优化器选择最佳的执行路径,当sysmaster库中没有相应的统计信息,或者统计 ...
- SQL Server 中WITH (NOLOCK)
with(nolock)的功能: 1: 指定允许脏读.不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据.允许脏读可能产生较多的并发操作,但其代价是读取 ...
- SQL统计不重复字段的个数.
注意:下面的举例适用于ORCLE和MSSQL,不能在Access中使用. 语法 SELECT COUNT(DISTINCT column(s)) FROM table 举例 With this &qu ...
- Oracle 11g 新特性(一)-- 虚拟列
数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如 ...
- mysql 刘道成视频教程 第3课
第3课: 1.mysql中条件使用关键字where: 2.查 select name,content from msg ; select name,content 控制列 where id>2 ...
- android入门到熟练(三)----UI界面
1.TextView 以下只是一部分属性,还有很多属性需要在用到时候再说 <TextView android:textSize="24sp"//文字大小 android:te ...
- Fedora 21 设置开机启动脚本
sudo touch /etc/rc.d/rc.localsudo vim /etc/rc.d/rc.local 在/etc/rc.d/rc.local文件中写入, 然后使用:wq命令 保存并退出. ...
- Less小记
Less除了在引用的时候link和script有顺序之外,在编译过程中,less中的代码顺序也会造成对样式的重置.