现在开发app,可以说离不开网络操作,今天给大家介绍一下Android网络框架volley的使用方法。
volley简介
Volley主页 https://android.googlesource.com/platform/frameworks/volley
Github地址 https://github.com/mcxiaoke/android-volley
Volley:2013年Google I/O大会上推出的一个新的Android网络通信框架,能使网络通信更快,更简单,更健壮。
功能:
Json,图像等的异步下载
网络请求的排序(scheduling)
网络请求的优先级处理
缓存
多级别取消请求
和Activity生命周期联动(Activity结束时同时取消所有请求)
使用volley:
compile 'com.mcxiaoke.volley:library:1.0.19'
基本使用方法
StringRequest使用方法:
演示:通过StringRequest发送一个get请求
<code class="hljs java has-numbering"> <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getStringRequest</span>() { String url=<span class="hljs-string">"http://api.k780.com:88/?app=phone.get&phone=13800138000&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"</span>; RequestQueue queue= Volley.newRequestQueue(<span class="hljs-keyword">this</span>); StringRequest request=<span class="hljs-keyword">new</span> StringRequest(url, <span class="hljs-keyword">new</span> Response.Listener<String>() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onResponse</span>(String s) { Log.e(<span class="hljs-string">"success"</span>,s); } }, <span class="hljs-keyword">new</span> Response.ErrorListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onErrorResponse</span>(VolleyError volleyError) { } }); queue.add(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>
演示:通过StringRequest发送一个post请求
<code class="hljs lasso has-numbering"> <span class="hljs-keyword">private</span> <span class="hljs-literal">void</span> postStringRequest() { <span class="hljs-built_in">String</span> url<span class="hljs-subst">=</span><span class="hljs-string">"http://api.k780.com:88/?app=phone.get"</span>; RequestQueue <span class="hljs-built_in">queue</span><span class="hljs-subst">=</span>Volley<span class="hljs-built_in">.</span>newRequestQueue(this); StringRequest request<span class="hljs-subst">=</span><span class="hljs-literal">new</span> StringRequest(Request<span class="hljs-built_in">.</span>Method<span class="hljs-built_in">.</span>POST, url, <span class="hljs-literal">new</span> Response<span class="hljs-built_in">.</span>Listener<span class="hljs-subst"><</span><span class="hljs-built_in">String</span><span class="hljs-subst">></span>() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onResponse(<span class="hljs-built_in">String</span> s) { <span class="hljs-keyword">Log</span><span class="hljs-built_in">.</span>e(<span class="hljs-string">"sucess"</span>,s); } }, <span class="hljs-literal">new</span> Response<span class="hljs-built_in">.</span>ErrorListener() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onErrorResponse(VolleyError volleyError) { } }){ @Override <span class="hljs-keyword">protected</span> <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>, <span class="hljs-built_in">String</span><span class="hljs-subst">></span> getParams() throws AuthFailureError { <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>,<span class="hljs-built_in">String</span><span class="hljs-subst">></span> <span class="hljs-built_in">map</span><span class="hljs-subst">=</span><span class="hljs-literal">new</span> HashMap<span class="hljs-subst"><></span>(); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"phone"</span>,<span class="hljs-string">"13800138000"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"appkey"</span>, <span class="hljs-string">"10003"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"sign"</span>, <span class="hljs-string">"b59bc3ef6191eb9f747dd4e83c99f2a4"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"format"</span>, <span class="hljs-string">"json"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"idcard"</span>, <span class="hljs-string">"110101199001011114"</span>); <span class="hljs-keyword">return</span> <span class="hljs-built_in">map</span>; } }; <span class="hljs-built_in">queue</span><span class="hljs-built_in">.</span>add(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li></ul>
通过上述代码,我们可以总结出,StringRequest可以发送get和post请求,但是服务器返回的数据以String类型进行接收。
通过StringRequest发送请求一般需要以下三步:
1.创建一个请求队列RequestQueue
2.创建StringRequest对象
3.将请求对象添加到请求队列中
JsonRequest使用方法:
演示:通过JsonRequest发送一个get请求
<code class="hljs java has-numbering"> <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getJsonRequest</span>() { String url=<span class="hljs-string">"http://api.k780.com:88/?app=phone.get&phone=13800138000&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"</span>; RequestQueue queue= Volley.newRequestQueue(<span class="hljs-keyword">this</span>); JsonObjectRequest request=<span class="hljs-keyword">new</span> JsonObjectRequest(url, <span class="hljs-keyword">new</span> Response.Listener<JSONObject>() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onResponse</span>(JSONObject jsonObject) { Log.e(<span class="hljs-string">"success"</span>,jsonObject.toString()); } }, <span class="hljs-keyword">new</span> Response.ErrorListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onErrorResponse</span>(VolleyError volleyError) { } }); queue.add(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>
演示:通过JsonRequest发送一个post请求
<code class="hljs lasso has-numbering"> <span class="hljs-keyword">private</span> <span class="hljs-literal">void</span> postJsonRequest() { <span class="hljs-built_in">String</span> url<span class="hljs-subst">=</span><span class="hljs-string">"http://api.k780.com:88/?app=phone.get"</span>; RequestQueue <span class="hljs-built_in">queue</span><span class="hljs-subst">=</span>Volley<span class="hljs-built_in">.</span>newRequestQueue(this); JsonObjectRequest request<span class="hljs-subst">=</span><span class="hljs-literal">new</span> JsonObjectRequest(Request<span class="hljs-built_in">.</span>Method<span class="hljs-built_in">.</span>POST, url, <span class="hljs-literal">new</span> Response<span class="hljs-built_in">.</span>Listener<span class="hljs-subst"><</span>JSONObject<span class="hljs-subst">></span>() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onResponse(JSONObject jsonObject) { <span class="hljs-keyword">Log</span><span class="hljs-built_in">.</span>e(<span class="hljs-string">"success"</span>,jsonObject<span class="hljs-built_in">.</span>toString()); } }, <span class="hljs-literal">new</span> Response<span class="hljs-built_in">.</span>ErrorListener() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onErrorResponse(VolleyError volleyError) { } }){ @Override <span class="hljs-keyword">protected</span> <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>, <span class="hljs-built_in">String</span><span class="hljs-subst">></span> getParams() throws AuthFailureError { <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>,<span class="hljs-built_in">String</span><span class="hljs-subst">></span> <span class="hljs-built_in">map</span><span class="hljs-subst">=</span><span class="hljs-literal">new</span> HashMap<span class="hljs-subst"><></span>(); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"phone"</span>,<span class="hljs-string">"13800138000"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"appkey"</span>, <span class="hljs-string">"10003"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"sign"</span>, <span class="hljs-string">"b59bc3ef6191eb9f747dd4e83c99f2a4"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"format"</span>, <span class="hljs-string">"json"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"idcard"</span>, <span class="hljs-string">"110101199001011114"</span>); <span class="hljs-keyword">return</span> <span class="hljs-built_in">map</span>; } }; <span class="hljs-built_in">queue</span><span class="hljs-built_in">.</span>add(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li></ul>
通过以上分析,可以发现,StringRequest和JsonObjectRequest用法基本一样,只是接收的数据类型不一样。
同理,JsonArrayRequest方法和上面的用法也差不多,这里不做过多介绍。
封装Volley:
具体实现功能如下:
发送get请求
发送post请求
加载网络图片
上传图片
Volley管理的类:
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 管理类 *<span class="hljs-javadoctag"> @author</span> Yan */</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyVolley</span> {</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String TAG=<span class="hljs-string">"MyVolley"</span>; <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> MyVolley instance; <span class="hljs-comment">//请求队列</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> RequestQueue mRequestQueue; <span class="hljs-comment">//创建ImageLoader</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> ImageLoader mImageLoader; <span class="hljs-comment">//默认分配最大空间的几分之几</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> RATE=<span class="hljs-number">8</span>; <span class="hljs-keyword">public</span> <span class="hljs-title">MyVolley</span>(Context context){ <span class="hljs-comment">//初始化请求队列(默认创建5个线程)</span> mRequestQueue=Volley.newRequestQueue(context); <span class="hljs-comment">//获取ActivityManager管理者</span> ActivityManager manager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); <span class="hljs-keyword">int</span> maxSize=manager.getMemoryClass()/RATE; <span class="hljs-comment">//初始化ImageLoader对象</span> mImageLoader=<span class="hljs-keyword">new</span> ImageLoader(mRequestQueue, <span class="hljs-keyword">new</span> BitmapLruCache(<span class="hljs-number">1024</span>*<span class="hljs-number">1024</span>*maxSize)); Log.e(TAG, <span class="hljs-string">"MyVolley初始化完成"</span>); } <span class="hljs-javadoc">/** * Volley的初始化操作,使用volley前必须调用此方法 */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">init</span>(Context context){ <span class="hljs-keyword">if</span>(instance==<span class="hljs-keyword">null</span>){ instance=<span class="hljs-keyword">new</span> MyVolley(context); } } <span class="hljs-javadoc">/** * 获取消息队列 */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> RequestQueue <span class="hljs-title">getRequestQueue</span>(){ throwIfNotInit(); <span class="hljs-keyword">return</span> mRequestQueue; } <span class="hljs-javadoc">/** * 获取ImageLoader */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ImageLoader <span class="hljs-title">getImageLoader</span>(){ throwIfNotInit(); <span class="hljs-keyword">return</span> mImageLoader; } <span class="hljs-javadoc">/** * 加入请求队列 */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">addRequest</span>(Request<?> request){ getRequestQueue().add(request); } <span class="hljs-javadoc">/** * 加载网络图片 */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getImage</span>(String requestUrl, ImageView imageView) { getImage(requestUrl, imageView, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>); } <span class="hljs-javadoc">/** * 加载网络图片 * */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getImage</span>(String requestUrl, ImageView imageView, <span class="hljs-keyword">int</span> defaultImageResId, <span class="hljs-keyword">int</span> errorImageResId) { getImage(requestUrl, imageView, defaultImageResId, errorImageResId, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>); } <span class="hljs-javadoc">/** * 加载网络图片 * */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getImage</span>(String requestUrl, ImageView imageView, <span class="hljs-keyword">int</span> defaultImageResId, <span class="hljs-keyword">int</span> errorImageResId, <span class="hljs-keyword">int</span> maxWidth, <span class="hljs-keyword">int</span> maxHeight) { imageView.setTag(requestUrl); <span class="hljs-keyword">try</span> { getImageLoader().get( requestUrl, ImageListenerFactory.getImageListener(imageView, defaultImageResId, errorImageResId), maxWidth, maxHeight); } <span class="hljs-keyword">catch</span> (Exception e) { e.printStackTrace(); } } <span class="hljs-javadoc">/** * 检查是否完成初始化 */</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">throwIfNotInit</span>() { <span class="hljs-keyword">if</span> (instance == <span class="hljs-keyword">null</span>) { <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> IllegalStateException(<span class="hljs-string">"MyVolley尚未初始化,在使用前应该执行init()"</span>); } } }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li></ul>
通过以上代码,主要提供了下面几个方法:
1.在构造方法中,初始化一个全局的请求队列RequestQueue,初始化了一个ImageLoader。
2.获取消息队列
3.获取ImageLoader对象
4.将请求加入到消息队列中
5.加载图片
注意:使用MyVolley时,一定要在应用的全局的Application中进行初始化
MyVolley.init(getApplicationContext());
加载图片中涉及到的2个缓存类如下:
<code class="hljs scala has-numbering"><span class="hljs-javadoc">/** * 图片缓存类(Lru算法) * <span class="hljs-javadoctag">@author</span> Yan * */</span> public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BitmapLruCache</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">LruCache</span><<span class="hljs-title">String</span>, <span class="hljs-title">Bitmap</span>> <span class="hljs-title">implements</span> <span class="hljs-title">ImageCache</span>{</span> <span class="hljs-keyword">private</span> static <span class="hljs-keyword">final</span> String TAG=<span class="hljs-string">"BitmapLruCache"</span>; <span class="hljs-comment">//图片缓存的软引用</span> <span class="hljs-keyword">private</span> BitmapSoftRefCache softRefCache; public BitmapLruCache(int maxSize) { <span class="hljs-keyword">super</span>(maxSize); <span class="hljs-comment">//初始化BitmapSoftRefCache</span> softRefCache=<span class="hljs-keyword">new</span> BitmapSoftRefCache(); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> int sizeOf(String key, Bitmap value) { <span class="hljs-keyword">return</span> value.getRowBytes()*value.getHeight(); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { <span class="hljs-keyword">if</span>(evicted){ <span class="hljs-comment">//将bitmap添加到软引用的缓存中</span> softRefCache.putBitmap(key, oldValue); } } <span class="hljs-javadoc">/** * 从缓存中获取图片 */</span> <span class="hljs-annotation">@Override</span> public Bitmap getBitmap(String url) { Bitmap bitmap=get(url); <span class="hljs-keyword">if</span>(bitmap==<span class="hljs-keyword">null</span>){ <span class="hljs-comment">//从软引用缓存中获取</span> bitmap=softRefCache.getBitmap(url); } <span class="hljs-keyword">return</span> bitmap; } <span class="hljs-javadoc">/** * 将图片放入到缓存中 */</span> <span class="hljs-annotation">@Override</span> public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); } } </code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li></ul>
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 图片缓存管理类(软引用) *<span class="hljs-javadoctag"> @author</span> Yan * */</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BitmapSoftRefCache</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">ImageCache</span> {</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String TAG=<span class="hljs-string">"BitmapSoftRefCache"</span>; <span class="hljs-comment">//创建一个集合保存Bitmap</span> <span class="hljs-keyword">private</span> LinkedHashMap<String,SoftReference<Bitmap>> map; <span class="hljs-keyword">public</span> <span class="hljs-title">BitmapSoftRefCache</span>(){ map=<span class="hljs-keyword">new</span> LinkedHashMap<>(); } <span class="hljs-javadoc">/** * 根据图片url从缓存中拿出bitmap */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> Bitmap <span class="hljs-title">getBitmap</span>(String url) { Bitmap bitmap=<span class="hljs-keyword">null</span>; SoftReference<Bitmap> softRef=map.get(url); <span class="hljs-keyword">if</span>(softRef!=<span class="hljs-keyword">null</span>){ bitmap=softRef.get(); <span class="hljs-keyword">if</span>(bitmap==<span class="hljs-keyword">null</span>){ <span class="hljs-comment">//从集合中移除</span> map.remove(url); } } <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>; } <span class="hljs-javadoc">/** * 把图片放进缓存中 */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">putBitmap</span>(String url, Bitmap bitmap) { SoftReference<Bitmap> softRef=<span class="hljs-keyword">new</span> SoftReference<Bitmap>(bitmap); map.put(url, softRef); } } </code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li></ul>
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 图片加载状态监听 *<span class="hljs-javadoctag"> @author</span> Yan * */</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ImageListenerFactory</span> {</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String TAG=<span class="hljs-string">"ImageListenerFactory"</span>; <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ImageListener <span class="hljs-title">getImageListener</span>(<span class="hljs-keyword">final</span> ImageView view, <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> defaultImageResId, <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> errorImageResId){ <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> ImageListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onErrorResponse</span>(VolleyError error) { <span class="hljs-keyword">if</span>(errorImageResId!=<span class="hljs-number">0</span>){ view.setImageResource(errorImageResId); } } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onResponse</span>(ImageContainer response, <span class="hljs-keyword">boolean</span> isImmediate) { <span class="hljs-keyword">if</span>(response.getBitmap()!=<span class="hljs-keyword">null</span>){ <span class="hljs-keyword">if</span>(view.getTag().toString().equals(response.getRequestUrl())){ view.setImageBitmap(response.getBitmap()); } } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(defaultImageResId!=<span class="hljs-number">0</span>){ view.setImageResource(defaultImageResId); } } }; } }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li></ul>
这里加载图片采用了LRU算法,然后配合软引用使用,这样会更好的对内存进行管理,代码中注释已经很详细,相信大家都可以理解。
<code class="hljs axapta has-numbering"><span class="hljs-comment">/** * 返回成功监听(自定义处理逻辑) * @author Yan */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">abstract</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyReponseListener</span> <span class="hljs-inheritance"><span class="hljs-keyword">implements</span></span> <span class="hljs-title">Response</span>.<span class="hljs-title">Listener</span><<span class="hljs-title">BaseVO</span>> {</span> @Override <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> onResponse(BaseVO arg0) { onMyResponse(arg0); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> onMyResponse(BaseVO t) { <span class="hljs-comment">// DialogMaker.closeProgressDialog();</span> <span class="hljs-comment">// 自定义处理逻辑</span> ... <span class="hljs-keyword">return</span> <span class="hljs-keyword">true</span>; } } </code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li></ul>
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 自定义返回错误信息监听 * *<span class="hljs-javadoctag"> @author</span> Yan * */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">abstract</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyErrorListener</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">ErrorListener</span> {</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onErrorResponse</span>(VolleyError error) { <span class="hljs-comment">//自定义同意错误逻辑处理</span> ... } }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul>
下面提供一个请求服务器返回数据后封装成对象的一个GsonRequest:
<code class="hljs scala has-numbering">public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GsonRequest</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Request</span><<span class="hljs-title">BaseVO</span>>{</span> <span class="hljs-keyword">private</span> static <span class="hljs-keyword">final</span> String TAG=<span class="hljs-string">"GsonRequest"</span>; <span class="hljs-comment">//超时时间,默认10秒</span> <span class="hljs-keyword">private</span> int defaultHttpTimeOut=<span class="hljs-number">10</span>*<span class="hljs-number">1000</span>; <span class="hljs-comment">//回调监听</span> <span class="hljs-keyword">private</span> Listener<BaseVO> listener; <span class="hljs-comment">//返回类型</span> <span class="hljs-keyword">private</span> Type <span class="hljs-keyword">type</span>; <span class="hljs-comment">//请求参数</span> <span class="hljs-keyword">private</span> Map<String,String> methodBody; <span class="hljs-javadoc">/** * get请求 * * <span class="hljs-javadoctag">@param</span> url * <span class="hljs-javadoctag">@param</span> type * <span class="hljs-javadoctag">@param</span> listener * <span class="hljs-javadoctag">@param</span> errorListener */</span> public GsonRequest(String url, Type <span class="hljs-keyword">type</span>, Listener<BaseVO> listener, ErrorListener errorListener) { <span class="hljs-keyword">super</span>(Method.GET, url, errorListener); <span class="hljs-comment">// 不启用缓存(默认是true)</span> setShouldCache(<span class="hljs-keyword">false</span>); <span class="hljs-keyword">this</span>.<span class="hljs-keyword">type</span> = <span class="hljs-keyword">type</span>; <span class="hljs-keyword">this</span>.listener = listener; <span class="hljs-comment">// 设置重连策略</span> <span class="hljs-keyword">this</span>.setRetryPolicy(<span class="hljs-keyword">new</span> DefaultRetryPolicy(defaultHttpTimeOut, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); } <span class="hljs-javadoc">/** * post请求 * * <span class="hljs-javadoctag">@param</span> methodName * <span class="hljs-javadoctag">@param</span> methodBoby * <span class="hljs-javadoctag">@param</span> type * <span class="hljs-javadoctag">@param</span> listener * <span class="hljs-javadoctag">@param</span> errorListener */</span> public GsonRequest(String url, Map<String, String> methodBoby, Type <span class="hljs-keyword">type</span>, Listener<BaseVO> listener, ErrorListener errorListener) { <span class="hljs-keyword">super</span>(Method.POST, url, errorListener); <span class="hljs-keyword">this</span>.methodBody = methodBoby; <span class="hljs-keyword">this</span>.listener = listener; <span class="hljs-keyword">this</span>.<span class="hljs-keyword">type</span> = <span class="hljs-keyword">type</span>; <span class="hljs-comment">// 不启用缓存</span> setShouldCache(<span class="hljs-keyword">false</span>); <span class="hljs-comment">// 设置重连策略</span> <span class="hljs-keyword">this</span>.setRetryPolicy(<span class="hljs-keyword">new</span> DefaultRetryPolicy(defaultHttpTimeOut, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); } <span class="hljs-javadoc">/** * 设置请求参数 */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> Map<String, String> getParams() <span class="hljs-keyword">throws</span> AuthFailureError { <span class="hljs-keyword">if</span>(methodBody==<span class="hljs-keyword">null</span>){ <span class="hljs-keyword">return</span> <span class="hljs-keyword">super</span>.getParams(); } <span class="hljs-comment">//创建一个集合,保存请求参数</span> Map<String,String> map=<span class="hljs-keyword">new</span> LinkedHashMap<>(); <span class="hljs-comment">//----此处可以添加多个通用参数</span> <span class="hljs-comment">//map.put(key,value);</span> <span class="hljs-comment">//------</span> <span class="hljs-comment">//------</span> <span class="hljs-comment">//遍历集合</span> Iterator<Entry<String,String>> iter=methodBody.entrySet().iterator(); <span class="hljs-keyword">while</span>(iter.hasNext()){ Entry<String, String> entry=iter.next(); map.put(entry.getKey(), entry.getValue()); } <span class="hljs-keyword">return</span> map; } <span class="hljs-javadoc">/** * 将服务器返回的原生字节内容进行转换 */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> Response<BaseVO> parseNetworkResponse(NetworkResponse response) { <span class="hljs-keyword">try</span> { <span class="hljs-comment">// 获取返回的数据(在 Content-Type首部中获取编码集,如果没有找到,默认返回 ISO-8859-1)</span> String jsonString = <span class="hljs-keyword">new</span> String(response.data, HttpHeaderParser.parseCharset(response.headers)); <span class="hljs-keyword">return</span> Response.success(parseNetworkResponseDelegate(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } <span class="hljs-keyword">catch</span> (Exception e) { <span class="hljs-keyword">return</span> Response.error(<span class="hljs-keyword">new</span> ParseError(e)); } } <span class="hljs-javadoc">/** * 将服务器返回的内容用gson进行封装 */</span> <span class="hljs-keyword">private</span> BaseVO parseNetworkResponseDelegate(String jsonString) { <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Gson().fromJson(jsonString, <span class="hljs-keyword">type</span>); } <span class="hljs-javadoc">/** * 将解析后的数据进行回调 */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> void deliverResponse(BaseVO arg0) { listener.onResponse(arg0); } }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li><li>107</li><li>108</li><li>109</li><li>110</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li><li>107</li><li>108</li><li>109</li><li>110</li></ul>
下面提供一个请求服务器返回XML格式数据后的一个XMLRequest:
<code class="hljs scala has-numbering">** * 服务器以XML格式返回数据 * <span class="hljs-annotation">@author</span> Yan */ public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">XMLRequest</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Request</span><<span class="hljs-title">XmlPullParser</span>>{</span> <span class="hljs-keyword">private</span> Listener<XmlPullParser> mListener; public XMLRequest(int method, String url, Listener<XmlPullParser> listener, ErrorListener errorListener){ <span class="hljs-keyword">super</span>(method, url, errorListener); <span class="hljs-comment">//不启用缓存</span> setShouldCache(<span class="hljs-keyword">false</span>); mListener=listener; } public XMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { <span class="hljs-keyword">this</span>(Method.GET, url, listener, errorListener); } <span class="hljs-javadoc">/** * 解析服务器返回的数据 */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> Response<XmlPullParser> parseNetworkResponse( NetworkResponse response) { <span class="hljs-keyword">try</span> { String xmlString = <span class="hljs-keyword">new</span> String(response.data, HttpHeaderParser.parseCharset(response.headers)); <span class="hljs-comment">//创建解析工厂</span> XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); <span class="hljs-comment">//获取解析器</span> XmlPullParser xmlPullParser = factory.newPullParser(); <span class="hljs-comment">//设置解析数据</span> xmlPullParser.setInput(<span class="hljs-keyword">new</span> StringReader(xmlString)); <span class="hljs-keyword">return</span> Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response)); } <span class="hljs-keyword">catch</span> (UnsupportedEncodingException e) { <span class="hljs-keyword">return</span> Response.error(<span class="hljs-keyword">new</span> ParseError(e)); } <span class="hljs-keyword">catch</span> (XmlPullParserException e) { <span class="hljs-keyword">return</span> Response.error(<span class="hljs-keyword">new</span> ParseError(e)); } } <span class="hljs-javadoc">/** * 分发结果 */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> void deliverResponse(XmlPullParser response) { mListener.onResponse(response); } } </code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li></ul>
下面提供一个文件上传(支持多文件)的一个PostUploadRequest:
<code class="hljs scala has-numbering">public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PostUploadRequest</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Request</span><<span class="hljs-title">String</span>>{</span> <span class="hljs-javadoc">/** * 正确数据的时候回掉用 */</span> <span class="hljs-keyword">private</span> Listener mListener ; <span class="hljs-comment">/*请求 数据通过参数的形式传入*/</span> <span class="hljs-keyword">private</span> List<FormImage> mListItem ; <span class="hljs-keyword">private</span> String BOUNDARY = <span class="hljs-string">"--------------520-13-14"</span>; <span class="hljs-comment">//数据分隔线</span> <span class="hljs-keyword">private</span> String MULTIPART_FORM_DATA = <span class="hljs-string">"multipart/form-data"</span>; public PostUploadRequest(String url, List<FormImage> listItem, Listener<String> listener, ErrorListener errorListener) { <span class="hljs-keyword">super</span>(Method.POST, url, errorListener); <span class="hljs-keyword">this</span>.mListener = listener ; setShouldCache(<span class="hljs-keyword">false</span>); mListItem = listItem ; <span class="hljs-comment">//设置请求的响应事件,因为文件上传需要较长的时间,所以在这里加大了,设为10秒</span> setRetryPolicy(<span class="hljs-keyword">new</span> DefaultRetryPolicy(<span class="hljs-number">10</span>*<span class="hljs-number">1000</span>,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); } <span class="hljs-javadoc">/** * 这里开始解析数据 * <span class="hljs-javadoctag">@param</span> response Response from the network * <span class="hljs-javadoctag">@return</span> */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> Response<String> parseNetworkResponse(NetworkResponse response) { <span class="hljs-keyword">try</span> { String mString = <span class="hljs-keyword">new</span> String(response.data, HttpHeaderParser.parseCharset(response.headers)); <span class="hljs-keyword">return</span> Response.success(mString, HttpHeaderParser.parseCacheHeaders(response)); } <span class="hljs-keyword">catch</span> (UnsupportedEncodingException e) { <span class="hljs-keyword">return</span> Response.error(<span class="hljs-keyword">new</span> ParseError(e)); } } <span class="hljs-javadoc">/** * 回调正确的数据 * <span class="hljs-javadoctag">@param</span> response The parsed response returned by */</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> void deliverResponse(String response) { mListener.onResponse(response); } <span class="hljs-annotation">@Override</span> public byte[] getBody() <span class="hljs-keyword">throws</span> AuthFailureError { <span class="hljs-keyword">if</span> (mListItem == <span class="hljs-keyword">null</span>||mListItem.size() == <span class="hljs-number">0</span>){ <span class="hljs-keyword">return</span> <span class="hljs-keyword">super</span>.getBody() ; } ByteArrayOutputStream bos = <span class="hljs-keyword">new</span> ByteArrayOutputStream() ; int N = mListItem.size() ; <span class="hljs-keyword">for</span> (int i = <span class="hljs-number">0</span>; i < N ;i++){ FormImage formImage = mListItem.get(i) ; StringBuffer sb= <span class="hljs-keyword">new</span> StringBuffer() ; <span class="hljs-comment">/*第一行*/</span> <span class="hljs-comment">//`"--" + BOUNDARY + "\r\n"`</span> sb.append(<span class="hljs-string">"--"</span>+BOUNDARY); sb.append(<span class="hljs-string">"\r\n"</span>) ; <span class="hljs-comment">/*第二行*/</span> <span class="hljs-comment">//Content-Disposition: form-data; name="参数的名称"; filename="上传的文件名" + "\r\n"</span> sb.append(<span class="hljs-string">"Content-Disposition: form-data;"</span>); sb.append(<span class="hljs-string">" name=\""</span>); sb.append(formImage.getName()) ; sb.append(<span class="hljs-string">"\""</span>) ; sb.append(<span class="hljs-string">"; filename=\""</span>) ; sb.append(formImage.getFileName()) ; sb.append(<span class="hljs-string">"\""</span>); sb.append(<span class="hljs-string">"\r\n"</span>) ; <span class="hljs-comment">/*第三行*/</span> <span class="hljs-comment">//Content-Type: 文件的 mime 类型 + "\r\n"</span> sb.append(<span class="hljs-string">"Content-Type: "</span>); sb.append(formImage.getMime()) ; sb.append(<span class="hljs-string">"\r\n"</span>) ; <span class="hljs-comment">/*第四行*/</span> <span class="hljs-comment">//"\r\n"</span> sb.append(<span class="hljs-string">"\r\n"</span>) ; <span class="hljs-keyword">try</span> { bos.write(sb.toString().getBytes(<span class="hljs-string">"utf-8"</span>)); <span class="hljs-comment">/*第五行*/</span> <span class="hljs-comment">//文件的二进制数据 + "\r\n"</span> bos.write(formImage.getValue()); bos.write(<span class="hljs-string">"\r\n"</span>.getBytes(<span class="hljs-string">"utf-8"</span>)); } <span class="hljs-keyword">catch</span> (IOException e) { e.printStackTrace(); } } <span class="hljs-comment">/*结尾行*/</span> <span class="hljs-comment">//`"--" + BOUNDARY + "--" + "\r\n"`</span> String endLine = <span class="hljs-string">"--"</span> + BOUNDARY + <span class="hljs-string">"--"</span> + <span class="hljs-string">"\r\n"</span> ; <span class="hljs-keyword">try</span> { bos.write(endLine.toString().getBytes(<span class="hljs-string">"utf-8"</span>)); } <span class="hljs-keyword">catch</span> (IOException e) { e.printStackTrace(); } <span class="hljs-keyword">return</span> bos.toByteArray(); } <span class="hljs-comment">//Content-Type: multipart/form-data; boundary=----------8888888888888</span> <span class="hljs-annotation">@Override</span> public String getBodyContentType() { <span class="hljs-keyword">return</span> MULTIPART_FORM_DATA+<span class="hljs-string">"; boundary="</span>+BOUNDARY; } }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li></ul>
上传文件的FormImage类如下:
<code class="hljs cs has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> FormImage { <span class="hljs-comment">//参数的名称</span> <span class="hljs-keyword">private</span> String name ; <span class="hljs-comment">//文件名</span> <span class="hljs-keyword">private</span> String fileName ; <span class="hljs-comment">//文件的mine</span> <span class="hljs-keyword">private</span> String mime ; <span class="hljs-comment">//需要上传的文件</span> <span class="hljs-keyword">private</span> File file ; <span class="hljs-keyword">public</span> <span class="hljs-title">FormImage</span>() { } <span class="hljs-keyword">public</span> File <span class="hljs-title">getFile</span>() { <span class="hljs-keyword">return</span> file; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setFile</span>(File file) { <span class="hljs-keyword">this</span>.file = file; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getMime</span>() { <span class="hljs-keyword">return</span> mime; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setMime</span>(String mime) { <span class="hljs-keyword">this</span>.mime = mime; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getFileName</span>() { <span class="hljs-keyword">return</span> fileName; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setFileName</span>(String fileName) { <span class="hljs-keyword">this</span>.fileName = fileName; } <span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span>() { <span class="hljs-keyword">return</span> name; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span>(String name) { <span class="hljs-keyword">this</span>.name = name; } <span class="hljs-comment">//对文件进行二进制转换</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">byte</span>[] <span class="hljs-title">getValue</span>() { <span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">try</span> { FileInputStream fis = <span class="hljs-keyword">new</span> FileInputStream(file); ByteArrayOutputStream bos = <span class="hljs-keyword">new</span> ByteArrayOutputStream(<span class="hljs-number">1024</span>); <span class="hljs-keyword">byte</span>[] b = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>]; <span class="hljs-keyword">int</span> n; <span class="hljs-keyword">while</span> ((n = fis.read(b)) != -<span class="hljs-number">1</span>) { bos.write(b, <span class="hljs-number">0</span>, n); } fis.close(); bos.close(); buffer = bos.toByteArray(); } <span class="hljs-keyword">catch</span> (FileNotFoundException e) { e.printStackTrace(); } <span class="hljs-keyword">catch</span> (IOException e) { e.printStackTrace(); } <span class="hljs-keyword">return</span> buffer; }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li></ul>
下面演示如何使用封装后的方法进行网络请求:
1.发送get请求:
<code class="hljs java has-numbering"> <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getMyVolley</span>() { String url=<span class="hljs-string">"http://api.k780.com:88/?app=idcard.get&idcard=110101199001011114&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"</span>; GsonRequest request=<span class="hljs-keyword">new</span> GsonRequest(url, PersonInfoBean.class, <span class="hljs-keyword">new</span> MyReponseListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onResponse</span>(BaseVO t) { <span class="hljs-keyword">super</span>.onResponse(t); PersonInfoBean bean=(PersonInfoBean) t; Log.e(<span class="hljs-string">"success"</span>, bean.toString()); } }, <span class="hljs-keyword">new</span> MyErrorListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onErrorResponse</span>(VolleyError error) { <span class="hljs-keyword">super</span>.onErrorResponse(error); } }); MyVolley.addRequest(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li></ul>
2.发送post请求:
<code class="hljs lasso has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-literal">void</span> postMyVolley() { <span class="hljs-built_in">String</span> url<span class="hljs-subst">=</span><span class="hljs-string">"http://api.k780.com:88/?app=idcard.get"</span>; <span class="hljs-built_in">Map</span><span class="hljs-subst"><</span><span class="hljs-built_in">String</span>,<span class="hljs-built_in">String</span><span class="hljs-subst">></span> <span class="hljs-built_in">map</span><span class="hljs-subst">=</span><span class="hljs-literal">new</span> HashMap<span class="hljs-subst"><></span>(); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"appkey"</span>, <span class="hljs-string">"10003"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"sign"</span>, <span class="hljs-string">"b59bc3ef6191eb9f747dd4e83c99f2a4"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"format"</span>, <span class="hljs-string">"json"</span>); <span class="hljs-built_in">map</span><span class="hljs-built_in">.</span>put(<span class="hljs-string">"idcard"</span>, <span class="hljs-string">"110101199001011114"</span>); GsonRequest request<span class="hljs-subst">=</span><span class="hljs-literal">new</span> GsonRequest(url, <span class="hljs-built_in">map</span>, PersonInfoBean<span class="hljs-built_in">.</span>class, <span class="hljs-literal">new</span> MyReponseListener() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onResponse(BaseVO vo) { super<span class="hljs-built_in">.</span>onResponse(vo); PersonInfoBean bean<span class="hljs-subst">=</span>(PersonInfoBean) vo; <span class="hljs-keyword">Log</span><span class="hljs-built_in">.</span>e(<span class="hljs-string">"sucess"</span>, bean<span class="hljs-built_in">.</span>toString()); } }, <span class="hljs-literal">new</span> MyErrorListener() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onErrorResponse(VolleyError error) { super<span class="hljs-built_in">.</span>onErrorResponse(error); } }); MyVolley<span class="hljs-built_in">.</span>addRequest(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul>
3.上传多文件演示:
<code class="hljs lasso has-numbering"> <span class="hljs-comment">//上传文件路径</span> <span class="hljs-built_in">String</span> url<span class="hljs-subst">=</span><span class="hljs-string">"http://192.168.1.107:8080/FileUpload/FileServlet"</span>; <span class="hljs-built_in">List</span><span class="hljs-subst"><</span>FormImage<span class="hljs-subst">></span> <span class="hljs-built_in">list</span><span class="hljs-subst">=</span><span class="hljs-literal">new</span> ArrayList<span class="hljs-subst"><></span>(); <span class="hljs-built_in">String</span> path1<span class="hljs-subst">=</span> Environment<span class="hljs-built_in">.</span>getExternalStorageDirectory()<span class="hljs-built_in">.</span>getPath()<span class="hljs-subst">+</span>File<span class="hljs-built_in">.</span>separator<span class="hljs-subst">+</span><span class="hljs-string">"ss.png"</span>; <span class="hljs-built_in">String</span> path2<span class="hljs-subst">=</span> Environment<span class="hljs-built_in">.</span>getExternalStorageDirectory()<span class="hljs-built_in">.</span>getPath()<span class="hljs-subst">+</span>File<span class="hljs-built_in">.</span>separator<span class="hljs-subst">+</span><span class="hljs-string">"ic_launcher.png"</span>; File file1<span class="hljs-subst">=</span><span class="hljs-literal">new</span> File(path1); File file2<span class="hljs-subst">=</span><span class="hljs-literal">new</span> File(path2); FormImage f1<span class="hljs-subst">=</span><span class="hljs-literal">new</span> FormImage(); f1<span class="hljs-built_in">.</span>setFile(file1); f1<span class="hljs-built_in">.</span>setFileName(<span class="hljs-string">"t1"</span>); f1<span class="hljs-built_in">.</span>setName(<span class="hljs-string">"file1"</span>); f1<span class="hljs-built_in">.</span>setMime(<span class="hljs-string">"image/png"</span>); <span class="hljs-built_in">list</span><span class="hljs-built_in">.</span>add(f1); FormImage f2<span class="hljs-subst">=</span><span class="hljs-literal">new</span> FormImage(); f2<span class="hljs-built_in">.</span>setFile(file2); f2<span class="hljs-built_in">.</span>setFileName(<span class="hljs-string">"t2"</span>); f2<span class="hljs-built_in">.</span>setName(<span class="hljs-string">"file2"</span>); f2<span class="hljs-built_in">.</span>setMime(<span class="hljs-string">"image/png"</span>); <span class="hljs-built_in">list</span><span class="hljs-built_in">.</span>add(f2); PostUploadRequest request<span class="hljs-subst">=</span><span class="hljs-literal">new</span> PostUploadRequest(url, <span class="hljs-built_in">list</span>, <span class="hljs-literal">new</span> Response<span class="hljs-built_in">.</span>Listener<span class="hljs-subst"><</span><span class="hljs-built_in">String</span><span class="hljs-subst">></span>() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onResponse(<span class="hljs-built_in">String</span> s) { <span class="hljs-keyword">Log</span><span class="hljs-built_in">.</span>e(<span class="hljs-string">"success"</span>,s); } }, <span class="hljs-literal">new</span> Response<span class="hljs-built_in">.</span>ErrorListener() { @Override <span class="hljs-keyword">public</span> <span class="hljs-literal">void</span> onErrorResponse(VolleyError volleyError) { } }); MyVolley<span class="hljs-built_in">.</span>addRequest(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li></ul>
4.发送请求,服务器返回XML:
<code class="hljs java has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getXml</span>() { String url=<span class="hljs-string">"http://flash.weather.com.cn/wmaps/xml/china.xml"</span>; XMLRequest request=<span class="hljs-keyword">new</span> XMLRequest( url, <span class="hljs-keyword">new</span> Response.Listener<XmlPullParser>() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onResponse</span>(XmlPullParser xmlPullParser) { <span class="hljs-keyword">try</span> { <span class="hljs-keyword">int</span> eventType = xmlPullParser.getEventType(); <span class="hljs-keyword">while</span> (eventType != XmlPullParser.END_DOCUMENT) { <span class="hljs-keyword">switch</span> (eventType) { <span class="hljs-keyword">case</span> XmlPullParser.START_TAG: String nodeName = xmlPullParser.getName(); <span class="hljs-keyword">if</span> (<span class="hljs-string">"city"</span>.equals(nodeName)) { String pName = xmlPullParser.getAttributeValue(<span class="hljs-number">0</span>); Log.e(<span class="hljs-string">"TAG"</span>, <span class="hljs-string">"city is "</span> + pName); } <span class="hljs-keyword">break</span>; } eventType = xmlPullParser.next(); } }<span class="hljs-keyword">catch</span>(Exception e){ e.printStackTrace(); } } }, <span class="hljs-keyword">new</span> Response.ErrorListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onErrorResponse</span>(VolleyError volleyError) { } }); MyVolley.addRequest(request); }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li></ul>
4.利用ImageLoader加载图片:
<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyAdapter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">BaseAdapter</span>{</span> <span class="hljs-keyword">private</span> Context context; <span class="hljs-keyword">private</span> List<Person> list; <span class="hljs-keyword">private</span> LayoutInflater mInflater; <span class="hljs-keyword">public</span> ViewHolder holder; <span class="hljs-keyword">public</span> <span class="hljs-title">MyAdapter</span>(Context context, List<Person> list) { <span class="hljs-keyword">this</span>.context = context; <span class="hljs-keyword">this</span>.list = list; <span class="hljs-keyword">this</span>.mInflater=LayoutInflater.from(context); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getCount</span>() { <span class="hljs-keyword">return</span> list.size(); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> Object <span class="hljs-title">getItem</span>(<span class="hljs-keyword">int</span> position) { <span class="hljs-keyword">return</span> list.get(position); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">long</span> <span class="hljs-title">getItemId</span>(<span class="hljs-keyword">int</span> position) { <span class="hljs-keyword">return</span> position; } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> View <span class="hljs-title">getView</span>(<span class="hljs-keyword">int</span> position, View convertView, ViewGroup parent) { holder=<span class="hljs-keyword">null</span>; <span class="hljs-keyword">if</span>(convertView==<span class="hljs-keyword">null</span>){ convertView=mInflater.inflate(R.layout.itemone, <span class="hljs-keyword">null</span>); holder=<span class="hljs-keyword">new</span> ViewHolder(); holder.iv_image=(ImageView) convertView.findViewById(R.id.iv_image); holder.tv_name=(TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); } <span class="hljs-keyword">else</span>{ holder=(ViewHolder) convertView.getTag(); } Person bean=list.get(position); holder.tv_name.setText(bean.getName()); MyVolley.getImage(bean.getImgUrl(), holder.iv_image, R.mipmap.ic_launcher, R.mipmap.ic_launcher,<span class="hljs-number">150</span>,<span class="hljs-number">150</span>); <span class="hljs-keyword">return</span> convertView; } class ViewHolder{ <span class="hljs-keyword">private</span> TextView tv_name; <span class="hljs-keyword">private</span> ImageView iv_image; } }</code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li></ul>
上面主要介绍了如何封装Volley,并且如何使用封装后的MyVolley进行网络请求。
演示:
今天说了这么多,相信大家一定对Volley可以达到基本掌握的情况了,本篇文章主要是从实战角度出发,主要是让大家体验一下volley的框架封装的用法,volley的源码本篇文章没有涉及到,但是这完全不影响大家使用volley,后续有时间我会从源码角度进行分析volley,说了这么多,有点饿了,今天就说到这里了,大家快快练习一下Volley的操作吧~!