Volley网络框架 compile 'com.android.volley:volley:1.0.0' 1. 创建一个RequestQueue(请求队列)对象。 2. 创建一个StringRequest(字符串请求)对象。3. 将StringRequest对象添加到RequestQueue里面。
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private StringRequest stringRequest;//请求 private RequestQueue mQueue;//请求队列 private ImageView image;//图片控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mQueue = Volley.newRequestQueue(this);//创建请求队列 initView(); }
GET请求:private void initStringRequest() {
//创建字符串请求 stringRequest = new StringRequest( GET,//默认也是GET请求 url, new Response.Listener<String>() { @Override//返回结果,调用该方法 public void onResponse(String response) { } }, new Response.ErrorListener() { @Override//返回错位 public void onErrorResponse(VolleyError error) { } } ); mQueue.add(stringRequest); }
POST请求:
private int page = 0;//点击按钮,会加加,改变请求的参数值 private void initPost() {//POST请求 String url = "http://www.tngou.net/api/lore/list"; StringRequest sr = new StringRequest( POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { System.out.println("---------" + response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } ) { @Override//重写提交POST参数的方法 protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map = new HashMap<>(); map.put("page", page + "");//往集合里面添加POST请求的参数 String rows = page * 5 + ""; map.put("rows", rows); return map;//返回集合 } }; sr.setShouldCache(false);//清除缓存,可用多次请求(默认为true,不会去二次加载) mQueue.add(sr); }
请求JSON数据:private void initJSON() {//请求JSON数据 String url = "http://www.tngou.net/api/lore/list"; JSONObject jsonObject = new JSONObject(); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( url, null,//可以设置为null(jsonObject) new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { JSONArray array = response.getJSONArray("tngou"); Log.i("MainActivity", "-------JSONArray的长度为:" + array.length()); for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); Log.i("MainActivity", "==================JSONObject:" + object.optString("description")); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } ); mQueue.add(jsonObjectRequest); }
使用ImageRequest加载网络图片
private void initImage() {//加载网络图片 String url = "http://img1.imgtn.bdimg.com/it/u=771033366,2819455885&fm=21&gp=0.jpg"; ImageRequest imageRequest = new ImageRequest( url,//URL new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { image.setImageBitmap(response); } }, 0,//高宽的最大值(设置为0,表示不会进行压缩) 0, //ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小 Bitmap.Config.RGB_565,//RGB_565则表示每个图片像素占据2个字节大小 new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } ); mQueue.add(imageRequest); }
使用ImageLoader加载网络图片
如果你觉得ImageRequest已经非常好用了,那我只能说你太容易满足了 ^_^。 实际上,Volley在请求网络图片方面可以做到的还远远不止这些,而ImageLoader就是一个很好的例子。 ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的, 不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存, 还可以过滤掉重复的链接,避免重复发送请求。String url = "http://img1.imgtn.bdimg.com/it/u=771033366,2819455885&fm=21&gp=0.jpg"; ImageLoader imageLoader = new ImageLoader( mQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) { return null; } @Override public void putBitmap(String url, Bitmap bitmap) { } } ); ImageLoader.ImageListener listener = ImageLoader.getImageListener( image,//图片控件 R.mipmap.ic_launcher,//加载图片时显示的图片 R.mipmap.ic_launcher);//加载失败时显示的图片 //get()方法接收两个参数,第一个参数就是图片的URL地址, // 第二个参数则是刚刚获取到的ImageListener对象。 // 当然,如果你想对图片的大小进行限制,也可以使用get()方法的重载, // 指定图片允许的最大宽度和高度,如下所示: imageLoader.get(url, listener);
虽然现在我们已经掌握了ImageLoader的用法, 但是刚才介绍的ImageLoader的优点却还没有使用到。 为什么呢?因为这里创建的ImageCache对象是一个空的实现, 完全没能起到图片缓存的作用。其实写一个ImageCache也非常简单, 但是如果想要写一个性能非常好的ImageCache, 最好就要借助Android提供的LruCache功能*/String url = "http://img1.imgtn.bdimg.com/it/u=771033366,2819455885&fm=21&gp=0.jpg"; ImageLoader imageLoader=new ImageLoader(mQueue,new BitmapCache()); ImageLoader.ImageListener listener=ImageLoader.getImageListener( image, R.mipmap.ic_launcher, R.mipmap.ic_launcher ); imageLoader.get(url,listener);
实现ImageLoader.ImageCache接口:
class BitmapCache implements ImageLoader.ImageCache{ private LruCache<String,Bitmap>mCache;//安卓类 private BitmapCache(){ int maxSize=10*1024*1024;//将缓存图片的大小设置为10M mCache=new LruCache<String,Bitmap>(maxSize){ @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes()*bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url,bitmap); }
Volley网络框架的简单使用
最新推荐文章于 2024-04-10 13:07:20 发布