Volley框架的使用

Volley的简介和特点:
特点:
 并发性,效率高,性能好。
Volley  :并发,齐射
 2013年开发大会上提出的网络请求工具,起源于框架afinal的框架。
 1.github
 2.csdn 
网络请求的好处:
 1.网络请求效率较高,而且写法简单,开发效率会得到很大提升。
 2.可以处理get,post等网络请求同时可以高效率的加载网络图片。
 3.可以不同的网络请求进行排序,根据优先级进行处理。
 4.网络请求缓存处理。
 5.多级别的取消请求。

 6.和activity的生命周期进行联动。

关于volley的底层常用类的分析
Volley:Volley 对外暴露的 API,通过 newRequestQueue(…) 函数新建并启动一个请求队列RequestQueue。
Request:表示一个请求的抽象类。StringRequest、JsonRequest、ImageRequest 都是它的子类,表示某种类型的请求。
RequestQueue:表示请求队列,里面包含一个CacheDispatcher(用于处理走缓存请求的调度线程)、
                             NetworkDispatcher数组(用于处理走网络请求的调度线程),一个ResponseDelivery(返回结果分发接口),
通过 start() 函数启动时会启动CacheDispatcher和NetworkDispatchers。
CacheDispatcher:一个线程,用于调度处理走缓存的请求。启动后会不断从缓存请求队列中取请求处理,队列为空则等待,
                           请求处理结束则将结果传递给ResponseDelivery去执行后续处理。当结果未缓存过、缓存失效或缓存需要刷新的情况下,
   该请求都需要重新进入NetworkDispatcher去调度处理。
NetworkDispatcher:一个线程,用于调度处理走网络的请求。启动后会不断从网络请求队列中取请求处理,队列为空则等待,
                            请求处理结束则将结果传递给ResponseDelivery去执行后续处理,并判断结果是否要进行缓存。
ResponseDelivery:返回结果分发接口,目前只有基于ExecutorDelivery的在入参 handler 对应线程内进行分发。
HttpStack:处理 Http 请求,返回请求结果。目前 Volley 中有基于 HttpURLConnection 的HurlStack和 基于 Apache HttpClient 的HttpClientStack。
Network:调用HttpStack处理请求,并将结果转换为可被ResponseDelivery处理的NetworkResponse。
Cache:缓存请求结果,Volley 默认使用的是基于 sdcard 的DiskBasedCache。NetworkDispatcher得到请求结果后判断是否需要存储在 
                            Cache,CacheDispatcher会从 Cache 中取缓存结果。

实例一:

post方式的使用

public class MyApplication extends Application{
    //1.创建请求队列,可以设置为全局变量
    private static RequestQueue mQueue;
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化请求队列
        mQueue = Volley.newRequestQueue(getApplicationContext());
    }

    public static RequestQueue getHttpQueue(){
        return  mQueue;
    }
}

public class StringPostActivity extends AppCompatActivity {

    private String url = "http://218.244.149.129:9010/api/companylist.php";
    //?industryid=98
    private TextView mTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_string_request);
        mTv = (TextView) findViewById(R.id.tv1);
        volleyPost(url);
    }

    public void volleyPost(String url){
        StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Log.i("tag","sss-----"+s);
                mTv.setText(s.substring(s.indexOf("{")));
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        }){
            //post请求需要重写的方法,map当中包含要写入到服务器当中的数据,key就是代表等号左边。
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String>map = new HashMap<>();
                map.put("industryid","98");
                return map;
            }
        };

        MyApplication.getHttpQueue().add(request);
    }
}

实例二:

ImageRequest的使用

public class ImageRequestActivity extends AppCompatActivity {

    private String url = "https://img-my.csdn.net/uploads/201407/26/1406383213_3557.jpg";
    private ImageView mIv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_request);
        mIv = (ImageView) findViewById(R.id.iv);

        volleyImage(url);
    }
    /**
     * String url,  图片的地址
     * Listener<Bitmap> listener  获取图片成功时回调的接口
     * int maxWidth,    图片的最大的宽度
     * int maxHeight,    图片的最大的高度
     * Config decodeConfig,    图片加载的质量
     *     可选四种:
     *       ARGB_8888        8+8+8+8 =32位          32/8=4字节      ==1个像素点上的字节数
     *       ARGB_4444        16位                   2字节
     *       RGB_565          16位                   2字节   :一般选择,因为图片压缩较小,且相对较为清晰
     *       ALPHA_8          不实用
     *
     *       480*800 = 384000 *4/1024/1024
     * ErrorListener errorListener    :获取图片失败时回调的接口
     * */
    public void volleyImage(String url){
        ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap bitmap) {
                mIv.setImageBitmap(bitmap);
            }
        },200,200,Bitmap.Config.RGB_565,new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                mIv.setImageResource(R.mipmap.ic_launcher);
            }
        });

        MyApplication.getHttpQueue().add(request);
    }
}
实例三:

NetWorkImageView的使用

public class NetworkImageActivity extends AppCompatActivity {
    private NetworkImageView netIv;
    private String url = "https://img-my.csdn.net/uploads/201407/26/1406383172_4577.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_network_img);
        netIv = (NetworkImageView) findViewById(R.id.netIv);
        RequestQueue mQueue = MyApplication.getHttpQueue();
        //图片异步加载器
        ImageLoader loader = new ImageLoader(mQueue,new BitmapCache());
        //设置默认加载的图片
        netIv.setDefaultImageResId(R.mipmap.ic_launcher);
        //设置网络获取失败时加载的图片
        netIv.setErrorImageResId(R.mipmap.ic_launcher);
        netIv.setImageUrl(url,loader);   //设置图片加载的地址,和加载器
    }
}

 <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/netIv"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:src="@mipmap/ic_launcher">

    </com.android.volley.toolbox.NetworkImageView>

public class BitmapCache implements ImageLoader.ImageCache{
    //定义缓存对象
    private LruCache<String,Bitmap>cache;
    //定义最大的存储空间
    private int maxSize = 8*1024*1024;
    public BitmapCache(){
        cache = new LruCache<String, Bitmap>(maxSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //计算需要存储的bitmap的对象的字节数
                return value.getRowBytes()*value.getHeight();
            }
        };
    }
    @Override
    public Bitmap getBitmap(String url) {
        return cache.get(url);
    }

    @Override
    public void putBitmap(String s, Bitmap bitmap) {
        cache.put(s,bitmap);
    }
}

实例四:

ImageLoaderd的使用

public class ImageViewActivity extends AppCompatActivity {

    private ImageView iv;
    private String url = ImageUrls.imageurls[2];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_view);
        iv = (ImageView) findViewById(R.id.iv);
        RequestQueue queue = MyApplication.getHttpQueue();
        ImageLoader loader = new ImageLoader(queue,new BitmapCache());

        ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
        //完成了图片的缓存
        loader.get(url,listener);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值