Volley使用

 Volley使用:Volley是Android平台上的网络通信库,能使网络通信更快、更简单、更健壮

Volley使用了典型的模板回调机制

实现Get,Post请求,上传json字符串,Volley的图片下载
 RequestQueue :管理全局请求的单例,最好全局只有一个
 StringRequest :文本的请求,下载字符串的时候需要创建的对象
 Response.Lisenter:正确的结果回调
 Response.ErrorLisenter:错误的结果回调

 Get请求:3步骤
 * 1.创建RequestQueue
 * 2.创建相应的文本请求对象
 * 3.将请求的文本对象加入到队列中,然后结果在参数中一接口回调到方式返回回来

实际代码:

 1.queue = Volley.newRequestQueue(this);
   2. private void getDataString(String str) {
        //2.创建stringrequest对象:1.请求网址2.正确响应到回调3.错误响应的回调
        StringRequest strRequest = new StringRequest(str, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Log.i(">>>>", ">>>" + s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
    3.queue.add(strRequest);
此处的错误:1.未加网络权限
                     2.new Error的方法写错

Post请求:3步骤
 * 1.创建RequestQueue
 * 2.创建相应的文本请求对象,设置post请求方式,复写getParams()(唯一的不同点)
 * 3.将请求的文本对象加入到队列中,然后结果在参数中一接口回调到方式返回回来

 private void postDataString(String s) {
        //2.创建一个post的请求对象:1.请求方式2.请求网址3.正确响应的回调4.错误响应的回调
        StringRequest strpost=new StringRequest(Request.Method.POST, s, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.i(">>>",">>>"+response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //aid=3550910 msg="data"  username="匿名用户"
                HashMap<String,String> map=new HashMap<>();
                map.put("aid","3550910");
                map.put("msg","yours comment");
                map.put("username","匿名用户");
                return map;
            }
        };
上传json字符串

* JSONObjectRequest-----JOSNObject
 * 1.创建RequestQueue
 * 2.创建相应的JSONObjectRequest
 * 3.将请求的JSONObjectRequest加入到队列中,然后结果在参数中一接口回调到方式返回回来
 * JSONArrayObjectRequest

1.queue = Volley.newRequestQueue(this);
 2.private void jsonDataObject(String path) {
        //用于上传json,1.参数请求网址2,上传的json对象3,正确的响应回调4,错误结果的响应
        JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST,path, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    int code=response.getInt("retcode");
                    Log.i(">>>",">>>"+code);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

   3.queue.add(jsonObjectRequest);

Volley的图片下载

 * ImageRequest:图片下载的请求
 * ImageLoader:图片下载请求,可以让你扩张内存缓存
 * NetworkImageView:view里面的自定义控件,将工具内置到空间里面,直接使用方法进行图片的下载

 *InageRequest的使用步骤:
 * 1.创建请求队列
 * 2.创建图片的下载请求ImageRequest对象;
 * 3.将创建的对象添加的队列中

    //2.图片请求的六个参数:
        //1.图片请求网址2.图片下载成功的回调3.图片下载最大宽度4,图片下载最大高度(当下载当图片超过
        // 你所设定的值的时候,会去压缩到你指定到值)
        //5.图片到格式或者参数:RGB_8888每个像素点占4个字节 RGB_565每个像素点占2个字节
        //6.错误图片下载的回调

final ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap bitmap) {
                if (bitmap != null) {
                    imageview.setImageBitmap(bitmap);
                }
            }
        }, 100, 100, Bitmap.Config.RGB_565, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
        queue.add(imageRequest);

ImageLoader使用步骤:3步(
   为啥要有他:实现vollay提供的接口,借助LruCache做内存缓存
              vollay本身只提供磁盘缓存)
 * 1.创建一个ImageLoader对象(queue,new ImageCache)
 * 2.创建一个(ImageLoader得到的)listener监听图片下载的过程,设置一些下载过程中的参数(下载预设图片,下在失败或者错误的图片)
 * 3.将创建的loader对象调用下载图片的方法,同时将lisenter参数传进去

 /**
     * volley使用ImageLoader进行图片下载
     * @param path
     */
    private void getImageLoader(String path) {
        //1.创建ImageLoader,1.请求队列 2.提供缓存的接口(可以借助LruCache这个类来实现)
        ImageLoader loader=new ImageLoader(queue, new MyImageCache());
        //2.创建Listener管理图片下载中的设置
        //1.图片下载显示的控件2.图片下载中的默认图片资源int 3.图片下载失败的资源int
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(imaShow, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
        //3.调用loader图片下载方法
        loader.get(path,listener,100,100);
    }

自己建一个MyImageCache;
  面试必问:
 * 实现volley提供的缓存接口,借助LruCache做内存缓存
 * volley本身只提供磁盘缓存
 * <p/>
 * LruCache
 * 1.android提供做内存缓存,是一个链表结构《key,vlaue》
 * 2.内存缓存的大小由你进行分配
 * 3.内置算法:当你所加入进来的东西,超过所限制的容量,那么会自动移除,最近使用频率交少的,然后将新的加入进来
 * 4.它的读取速率较于网络和dscard时最快的,但是容量时最小的
 */
public class MyImageCache implements ImageLoader.ImageCache {
    //1.将LruCache对象创建
    private LruCache<String, Bitmap> lruCache;

    public MyImageCache() {
        //传一个内存大小的值
        int size = 4 * 1024 * 1024;//定值
        //拿到运行内存的多少,分配给内存缓存
        int sizeMax = (int) (Runtime.getRuntime().maxMemory() / 8);
        lruCache = new LruCache<String, Bitmap>(sizeMax) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //复写sizeof方法,将传进来的值,进行计算
                return value.getByteCount();
            }
        };
    }
    @Override
    public Bitmap getBitmap(String url) {
        //get 从缓存中拿到资源
        return lruCache.get(url);
    }
    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        //put 将资源放到缓存中
        lruCache.put(url, bitmap);

    }
}


volley NetWorkImageView
 * 自定义的控件,将下载的工具,内置到了控件里面
 *
 * 使用步骤:
 * 1.在布局文件里面书写该控件
 * 2.在代码里面找到控件,并且设置相应
 * 3.调用显示图片的方法


1. 在布局里面添加,输入前面几个几个关建字母
2. queue = Volley.newRequestQueue(this);
        //1.将自定义控件找到
        networImageview = (NetworkImageView) findViewById(R.id.networkimg);    
 3.
//设置图片默认资源
        networImageview.setDefaultImageResId(R.mipmap.ic_launcher);
        //设置图片下载失败的资源
        networImageview.setErrorImageResId(R.mipmap.ic_launcher);
        //1.图片下载地址2.ImageLoader
        ImageLoader imageLoader=new ImageLoader(queue, new MyImageCache());
 4.
  //显示图片的方法
        networImageview.setImageUrl(path,imageLoader);






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值