进入android世界已经快要两年了,放眼望去,在这两年的android世界里,自己多少也成长了点,一路上磕磕碰碰,即使现在的我还是android学术界里最垫底的那一位,但还是阻挡不了我对未来android世界的探索的脚步,自从上次我坚定不移的辞掉了我的工作后,我发现这真的是我做得最正确的决定没有之一,我不知道当初我为什么要这么做,但是我只知道我耳边有这么个声音告诉我,世界那么多大,你真的该去看看了,我不想每天就码着烂掉牙的几行代码,一些被自己反复使用的封装的工具类,最可怕的是自己完全没有推陈出新的欲望,对未来充满了迷茫,养尊处优,这么做估计最后自己得到的只有年龄,失去了青春,而技术还是没有任何改进。于是我果断的踏上了 找新工作的路途,经过了两周的奔波,总算我来到了一家新的公司,来到新公司里有许多我学习的地方,同时也感觉到了自己的藐小,随着日子一天天的过去,不知道从何时开始养成了一些莫名的习惯,每天早上来到公司的第一件事就是看看各个技术论坛和各种技术分享网站,看看有没有最近更新的知识,每次撸代码很累的时候,就停息下来,看看别人的博客,和技术论坛,看看别人提的问题自己是否能够回答,或者看着别人的回答,自己也心里默默的想着,我会不会想到这种方法,或者有没有更加好的解决问题的办法。偶尔自己也会在自己不忙碌的时候写些博客,总结自己的不足。我相信虽然现在的我和以前的我还是没有多大的区别,但是至少目前我过得很充实,我很喜欢这样的工作,未来我一定会成长的更多。好了不念经了,这是我看了郭神对volley源码解析的第三遍后,自己重新写的,希望对各位能有所帮助。

volley是在13年的谷歌大会上推出的网络通讯框架,离17年已经有4个年头了,在这期间许多的网络请求框架都变得更加的成熟了,如okhttp、nohttp、Retrofit等。但volley只适合进行数据量不大,通信频繁的网络操作,有这么多请求框架,我为什么偏偏要解析volley了,其实我是这样想的,我看到好多大神,他们都对volley的源码有深入研究过,说白了就是感觉他们都挺牛逼的样子,自己也想去试试水,而且我觉得一通百通,只要会一个,其它的也万变不离其中。

1.在gradle文件里面进行配置
compile 'com.mcxiaoke.volley:library:1.0.+'

2.网络请求框架肯定是要加网络权限了。在清单文件里加入<uses-permission android:name="android.permission.INTERNET"/>权限

3.StringRequest的用法//默认指定为get的方式请求
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

StringRequest request = new StringRequest("https://www.cnblogs.com/", new Response.Listener<String>() {    @Override    public void onResponse(String response) {        Log.d(Tag, "成功响应:" + response);

    }}, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {        Log.d(Tag, "错误信息:" + error.getMessage());    }});

rq.add(request);

//Post方式的请求
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);StringRequest request = new StringRequest(Request.Method.POST, "https://www.cnblogs.com/", new Response.Listener<String>() {

    @Override    public void onResponse(String response) {        Log.d(Tag, "成功响应:" + response);

    }}, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {        Log.d(Tag, "错误信息:" + error.getMessage());    }}) {    @Override    protected Map<String, String> getParams() throws AuthFailureError {        Map<String, String> map = new HashMap<String, String>();        map.put("key1", "value1");        map.put("key2", "value2");

        return map;    }};

rq.add(request);

4.JsonRequest的用法
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

JsonObjectRequest jr = new JsonObjectRequest("http://v.juhe.cn/weather/index", null, new Response.Listener<JSONObject>() {

    @Override    public void onResponse(JSONObject response) {        Log.d(Tag, "成功响应:" + response);    }}, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {        Log.d(Tag, "错误信息:" + error.getMessage());

    }});

rq.add(jr);

5.ImageRequest的用法
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

ImageRequest ir = new ImageRequest("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center"        , new Response.Listener<Bitmap>() {    @Override    public void onResponse(Bitmap response) {

        iv.setImageBitmap(response);

    }}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {

        iv.setImageResource(R.drawable.ic_launcher);

    }});

rq.add(ir);

6.ImageLoader的用法
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

ImageLoader loader = new ImageLoader(rq, new ImageLoader.ImageCache() {    @Override    public Bitmap getBitmap(String url) {        return null;    }

    @Override    public void putBitmap(String url, Bitmap bitmap) {

    }});

ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv, R.drawable.ic_launcher, R.drawable.ic_launcher);

loader.get("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center"        , listener);

7.进行image缓存的功能
//进行image的缓存功能private void requestDataForImageCache() {    RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

    ImageLoader loader = new ImageLoader(rq, new MyImageCache());

    ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.drawable.ic_launcher,R.drawable.ic_launcher);

    loader.get("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center"    ,listener);

}

public class MyImageCache implements ImageLoader.ImageCache {    private LruCache<String, Bitmap> mCache;

    public MyImageCache() {

        int maxsize = 10 * 1024 * 1024;//10兆

 mCache = new LruCache<String, Bitmap>(maxsize) { @Override protected int sizeOf(String key, Bitmap bitmap) {

 //对sizeof和maxsize的解释:http://blog.csdn.net/yincheng886337/article/details/50678851 //http://blog.csdn.net/quanshuai0225/article/details/47104251

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //API 19 return bitmap.getAllocationByteCount(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {//API 12 return bitmap.getByteCount(); } // 在低版本中用一行的字节x高度 return bitmap.getRowBytes() * bitmap.getHeight(); //earlier version

 }     };     }         @Override         public Bitmap getBitmap(String url) {         //拿图片           return mCache.get(url);         }         @Override         public void putBitmap(String url, Bitmap bitmap) {         //放图片           mCache.put(url, bitmap); }      }

8.NetworkImageView的用法
  RequestQueue rq=Volley.newRequestQueue(MainActivity.this);

  ImageLoader loader=new ImageLoader(rq,new MyImageCache());  networkImageView = (NetworkImageView) findViewById(R.id.network_image);  networkImageView.setDefaultImageResId(R.drawable.default_image);  networkImageView.setErrorImageResId(R.drawable.failed_image);  networkImageView.setImageUrl("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center",        loader);
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/qiaoxiao/p/7219060.html

对volley的初步分析第一篇相关推荐

  1. 【高级内部资料】.NET数据批量写入性能分析 第一篇

    [高级内部资料].NET数据批量写入性能分析 第一篇 说起数据的批量写入,相信大家应该不陌生了,那么我们本系列的文章不准备讲述如何来进行数据的批量写入,而是介绍常用的数据批量写入方法的性能分析. 同时 ...

  2. Realtek 8125驱动分析第一篇——初始化

    Realtek 8125是瑞昱的2.5G网卡,今天开始分析一下该网卡的驱动程序. 目录 1 驱动模块注册 2 PCI相关初始化 2.1 PCI 驱动列表注册:pci_register_driver() ...

  3. jQuery 源码分析第一篇之入口源码

    目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...

  4. 山东大学软件实验课程-Ebiten-基于go语言实现的2D游戏库源码分析第一篇-综述 2021SC@SDUSC

    2021SC@SDUSC 目录 一.项目综述 二.go语言安装及环境配置 1.Go的安装 2.IDE的使用 三.小组内成员分工 一.项目综述 Ebiten 是Go 编程语言的开源游戏库.Ebiten ...

  5. b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释

    b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释 继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更 ...

  6. FIR_01 基于FPGA的FIR滤波器 (FDATOOL ISE ) 第一篇:初步认识和应用

    1 简介 对于FIR滤波器的理论部分,在本系列博客中不做论述,或许在后续更新的文章中会对其理论进行讨论. 本文为该系列博客的第一篇文章,将以最简单直观的方式让初学者体会到FIR滤波器的作用,采用最傻瓜 ...

  7. Mybatis源码分析第一天------Mybatis实用篇

    Mybatis源码分析第一天------Mybatis实用篇 一切最基本的操作就是参考官方文档:https://mybatis.org/mybatis-3/zh/configuration.html ...

  8. 第一篇论文:改进TCP及UDP的性能分析及比较

    开始读第一篇论文:改进TCP及UDP的性能分析及比较.欢迎大家来评论噢!或者加我的qq:63245576 这篇论文在Throughput,stability,intra-protocol fairne ...

  9. 第一篇 初步认识PRINCE2 管理体系

    第一篇 初步认识PRINCE2 管理体系 PRINCE2是英国商务部再1996年发布和实行的所有项目的标准程序,他和PMI体系不一样,PRINCE2作为政府部门投资开发的项目管理方法论,里面诸多优秀的 ...

最新文章

  1. 解决pip安装报错:is not a supported wheel on this platform
  2. (C++)1026 程序运行时间
  3. ransac剔除误匹配matlab代码,基于APAP图像拼接算法的改进
  4. 总说数据分析,你知道产品设计中各环节怎么运用数据么
  5. python中global 和 nonlocal 的作用域
  6. C++ class实现Huffman树(完整代码)
  7. C this指针的理解和作用
  8. 在Python中模拟do-while循环
  9. even though和even if的区别
  10. 编译原理语义分析代码_Pix2Pix原理分析与代码解读
  11. 使用代理软件SocksCap-v2.38H玩网络游戏
  12. php wps导入数据库,金山的wps的表格怎样导入sqlserver2008数据库中??_wps excel表格怎么导入数据库...
  13. 想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(七)
  14. 弹出usb大容量储存设备时出问题
  15. oled屏幕(IIC接口+1306驱动)+raspberrypi pico 显示基于RT-Thread
  16. 【Kay】MySQL必会常用函数
  17. 刮刮卡 vue canvas
  18. 用Java给您的图片瘦身之Thumbnailator技术
  19. 用Python实现斐波那契数列代码
  20. 2021-9-25 MQTT 阿里云服务器 esp32 micropython物联 以及pythonPC端

热门文章

  1. 【转】eclipse中window-preference选项中没有tomcat的解决方法
  2. 三阶魔方中心块调整配方和记忆方法
  3. [zz]How to sign .EXE, .DLL and .CAB files?
  4. java基础—采用递归的方式来获取相关目录下的子目录的名称
  5. Mr.J--jQuery效果总结
  6. Reservoir Sampling 蓄水池采样算法
  7. HttpClient官方sample代码的深入分析(连接池)
  8. 用 State Pattern 来实现一个简单的 状态机
  9. Java中isAssignableFrom()方法与instanceof()方法用法
  10. jQuery 学习笔记之十二 (选项卡)