Volley框架的学习

来源:互联网 发布:怎么样开好淘宝店 编辑:程序博客网 时间:2024/05/23 00:08

下面大部分描述来自http://blog.csdn.net/guolin_blog/article/details/17482095


学习Volley框架之前,就必须把Volley.jar包导入我们的项目中,步骤如下:

1、首先下载好Volley.jar包(下载地址)

2、然后在项目中,将项目模式切换到Project模式

3、打开app文件夹,找到libs文件夹,将Volley.jar包复制到文件夹中

4、打开Project Structure(在设置图标的右边),然后点击Dependencies,点击右上角的添加,选择第二个File Dependency

5、选择我们刚刚复制进去的包,点击OK就完成了



一、获取网络上的文字

首先我们获取www.baidu.com网页上的文字信息

RequestQueue mQueue = Volley.newRequestQueue(this);StringRequest stringRequest = new StringRequest("https://www.baidu.com",    new Response.Listener<String>() {    @Override    public void onResponse(String s) {        Log.e("wangbin",s+"!");    }    },    new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError volleyError) {        }});mQueue.add(stringRequest);
上面首先创建一个RequestQueue类的一个实例和一个StringRequest实例,然后将StringRequest实例添加到RequestQueue实例中去

上面的思路是:RequestQueue是一个请求队列,而StringRequest可以发出一个HTTP请求,最后将HTTP请求添加到队列中去

记得添加网络访问权限:<uses-permission android:name="android.permission.INTERNET" />


如果我们想要获取的文字是JSON格式的,我们也可以获取返回一个JsonObject对象,代码类似上面

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,      new Response.Listener<JSONObject>() {          @Override          public void onResponse(JSONObject response) {              Log.d("TAG", response.toString());          }      }, new Response.ErrorListener() {              @Override              public void onErrorResponse(VolleyError error) {                  Log.e("TAG", error.getMessage(), error);      }  });  

二、获取网络上的图片

利用ImageRequest获取网上一张图片

RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);ImageRequest imageRequest = new ImageRequest(         "https://gss1.bdstatic.com/5eN1dDebRNRTm2_p8IuM_a/res/img/richanglogo168_24.png",         new Response.Listener<Bitmap>() {             @Override             public void onResponse(Bitmap response) {                 image.setImageBitmap(response);             }         }, 0, 0, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {                @Override                public void onErrorResponse(VolleyError error) {                }            });mQueue.add(imageRequest);
思路跟之前获取文字是一样的

其中第三第四个是图片的最大宽高度,第五个参数是图片的颜色属性


利用ImageLoader获取图片,并进行缓存

RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);ImageLoader imageLoader = new ImageLoader(mQueue, new ImageLoader.ImageCache() {    @Override    public Bitmap getBitmap(String s) {        return null;    }    @Override    public void putBitmap(String s, Bitmap bitmap) {    }});ImageLoader.ImageListener listener = ImageLoader.getImageListener(image,    R.mipmap.ic_launcher,R.mipmap.ic_launcher);imageLoader.get("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png",    listener);
在创建ImageLoader实例的时候,第二个参数传入的是一个空的ImageCache对象,我们可以自己创建一个对象,来加载图片是防止出现OOM的情况

public class BitmapCache implements ImageLoader.ImageCache{    private LruCache<String,Bitmap> mCache;    public BitmapCache(){        int maxSize = 10 * 1024 * 1024;        mCache = new LruCache<String, Bitmap>(maxSize) {            @Override            protected int sizeOf(String key, Bitmap bitmap) {                return bitmap.getRowBytes() * bitmap.getHeight();            }        };    }    @Override    public Bitmap getBitmap(String s) {        return mCache.get(s);    }    @Override    public void putBitmap(String s, Bitmap bitmap) {        mCache.put(s,bitmap);    }}
然后只需将上面的ImageCache对象替换成这个类的对象即可

3、利用NetworkImageView自定义控件的办法加载网络图片

RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());networkImageView.setImageUrl("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png",    imageLoader);
上面networkImageView就是自定义控件,布局中写法如下

<com.android.volley.toolbox.NetworkImageView        android:id="@+id/network_image"        android:layout_width="100dp"        android:layout_height="100dp"        android:layout_gravity="center_horizontal"/>
控件的宽、高度就是我们需要压缩成的图片的大小,压缩过程是自动实现的,如果不想压缩的话,直接改成wrap_content属性就可以,当然记得获取布局id创建实例


对于第三部分和第四部分以后有空再来补上!


0 0
原创粉丝点击