1 public class MainActivity extends AppCompatActivity {
2
3 ImageView iv;
4 NetworkImageView iv_network;
5 RequestQueue queue;
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_main);
10 iv = (ImageView) findViewById(R.id.iv);
11 iv_network = (NetworkImageView) findViewById(R.id.iv_network);
12
13 queue = Volley.newRequestQueue(getApplicationContext());//或者用getApplicationContext()
14 }
15
16
17 private Response.ErrorListener errorListener = new Response.ErrorListener() {
18 @Override
19 public void onErrorResponse(VolleyError error) {
20 Log.e("TAG","請求錯誤");
21 }
22 };
23
24 public void net1(View v){
25 //第一個參數就是目標服務器的URL地址,第二個參數是服務器響應成功的回調,第三個參數是服務器響應失敗的回調
26 //默認GET請求
27 StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() {
28 @Override
29 public void onResponse(String response) {
30 Log.e("TAG","----response:"+response.toString());
31 }
32 },errorListener);
33
34 //將請求添加到隊列中
35 queue.add(request);
36 }
37
38 public void net2(View v){
39 //HTTP請求方式使用POST,
40 //StringRequest中並無提供設置POST參數的方法,
41 //可是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來獲取POST參數,
42 //咱們只須要在StringRequest的匿名類中重寫getParams()方法,在這裏設置POST參數就能夠了
43 StringRequest request = new StringRequest(Request.Method.POST, "http://route.showapi.com/109-35", new Response.Listener<String>() {
44 @Override
45 public void onResponse(String response) {
46 Log.e("TAG","---->response"+response.toString());
47 }
48 },errorListener){
49 @Override
50 protected Map<String, String> getParams() throws AuthFailureError {
51 Map<String,String> map = new HashMap<>();
52 map.put("showapi_appid","27306");
53 map.put("showapi_sign","150e9206e7f542bab4affe49d73cb920");
54 return map;
55 }
56 };
57
58 queue.add(request);
59 }
60
61 public void net3(View v){
62 //相似於StringRequest,JsonRequest也是繼承自Request類的,不過因爲JsonRequest是一個抽象類,所以咱們沒法直接建立它的實例。
63 //JsonRequest有兩個直接的子類,JsonObjectRequest和JsonArrayRequest
64
65 //注意這裏是拿不到數據的。
66 //jsonRequest爲null,重寫getParams()然而並無什麼用
67 //JsonObjectRequest的幾個坑,詳情見http://blog.csdn.net/onlysnail/article/details/47905375
68 JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, "http://route.showapi.com/109-35", null, new Response.Listener<JSONObject>() {
69 @Override
70 public void onResponse(JSONObject response) {
71 Log.e("TAG","----response"+response.toString());
72 }
73 }, errorListener){
74 @Override
75 protected Map<String, String> getParams() throws AuthFailureError {
76 Map<String,String> map = new HashMap<>();
77 map.put("showapi_appid","27306");
78 map.put("showapi_sign","150e9206e7f542bab4affe49d73cb920");
79 return map;
80 }
81 };
82 queue.add(request);
83 }
84
85 public void net4(View v){
86
87 ImageRequest request = new ImageRequest("https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1858172584,1668311861&fm=80&w=179&h=119&img.JPEG", new Response.Listener<Bitmap>() {
88 @Override
89 public void onResponse(Bitmap response) {
90 iv.setImageBitmap(response);
91 }
92 //防止OOM, 圖像裁剪,品質壓縮,三級緩存
93 //容許圖片最大的寬高,可調,壓縮比率爲0的話就表示無論圖片有多大,都不會壓縮
94 },200,200, ImageView.ScaleType.FIT_XY, Bitmap.Config.RGB_565,errorListener);
95
96 queue.add(request);
97 }
98
99 public void net5(View v){
100
101 ImageLoader loader = new ImageLoader(queue, new ImageLoader.ImageCache() {
102 /**
103 * LruCache原理:Cache保存一個強引用來限制內容數量。每當Item被訪問的時候,此Item就會移動到隊列的頭部。
104 * 當cache已滿的時候加入新的item時,在隊列尾部的item會被回收。
105 * 解釋:當超出指定內存值則移除最近最少用的圖片內存
106 * 拿到內存的八分之一來作圖片內存緩存
107 */
108 LruCache<String,Bitmap> bitmapLruCache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory()/8)){
109 @Override
110 protected int sizeOf(String key, Bitmap value) {
111 return value.getByteCount();
112 }
113 };
114
115 @Override
116 public Bitmap getBitmap(String url) {
117 return bitmapLruCache.get(url);
118 }
119
120 @Override
121 public void putBitmap(String url, Bitmap bitmap) {
122 bitmapLruCache.put(url,bitmap);
123 }
124
125 });
126
127 loader.get("https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2519065955,952826078&fm=80&w=179&h=119&img.JPEG", new ImageLoader.ImageListener() {
128 @Override
129 public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
130 iv.setImageBitmap(response.getBitmap());
131 }
132
133 @Override
134 public void onErrorResponse(VolleyError error) {
135
136 }
137 });
138
139 }
140
141
142 public void net6(View v){
143 ImageLoader loader = new ImageLoader(queue, new ImageLoader.ImageCache() {
144 LruCache<String,Bitmap> cache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory()/8)){
145 @Override
146 protected int sizeOf(String key, Bitmap value) {
147 return value.getByteCount();
148 }
149 };
150
151 @Override
152 public Bitmap getBitmap(String url) {
153 return cache.get(url);
154 }
155
156 @Override
157 public void putBitmap(String url, Bitmap bitmap) {
158 cache.put(url,bitmap);
159 }
160 });
161
162 /**
163 * NetworkImageView是一個自定義控件,繼承自ImageView,封裝了請求網絡加載圖片功能
164 * NetworkImageView並無提供設置最大寬高的方法,根據咱們設置空間的寬高結合網絡圖片的寬高內部會自動去實現壓縮
165 * 若是咱們不想要壓縮,能夠設置NetworkImageView控件的寬高都爲wrap_content
166 * 如今xml佈局中引用
167 */
168 iv_network.setImageUrl("https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=214772963,3279795725&fm=80&w=179&h=119&img.JPEG",loader);
169 }
170 }