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 }