美文网首页
安卓学习笔记-----Volley框架学习

安卓学习笔记-----Volley框架学习

作者: 天青色等烟雨hhft | 来源:发表于2017-12-09 17:28 被阅读0次

公司用的volley是自己封装好的,看了一下代码,理解起来有点难度,所以决定先学习一下volley的基本用法。

GET请求

首先需要获取到一个RequestQueue对象

RequestQueue mQueue=Volley.new RequestQueue(context)

这里的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,所以一般在每一个需要网络请求的类中创建一个RequestQueue就够了,请求队列启动的时候会做以下事情:

   /**
     * Starts the dispatchers in this queue.
     */
    public void start() {
    //结束队列中所有的线程
        stop();  // Make sure any currently running dispatchers are stopped.
        // Create the cache dispatcher and start it.
        //初始化缓存处理线程
        mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery);
        //启动缓存线程
        mCacheDispatcher.start();

        // Create network dispatchers (and corresponding threads) up to the pool size.
        //启动网络请求处理线程,默认为5个,可以自己设定 size
        for (int i = 0; i < mDispatchers.length; i++) {
            NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork,
                    mCache, mDelivery);
            //保存网络请求线程
            mDispatchers[i] = networkDispatcher;
            //启动网络请求处理线程
            networkDispatcher.start();
        }
    }

为了要发出一条HTTP请求,还需要创建一个StringRequest对象

StringRequest stringRequest=new StringRuest("http://www.baidu.com",new Response.Listener<String>(){
   @Override  
    public void onResponse(String response){
      Log.d("TAG", response);  
    }
  },new Response.ErrorListener(){
    @Override  
    public void onErrorResponse(VolleyError error) {  
      Log.e("TAG", error.getMessage(), error);  
    }  
});

StringRequest的构造方法传入的三个参数分别是:目标服务器的URL地址,服务器响应成功的回调,服务器响应失败的回调
最后将StringRequest对象添加到RequestQueue里就可以了

mQueue.add(StringRequest);
POST请求

StringRequest中没有提供设置POST参数的方法,但是提供了getParams方法

         StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
              @Override
              public void onResponse(String s) {
                  Log.i("aa", "post请求成功" + s);
             }
         }, new Response.ErrorListener() {
             @Override
             public void onErrorResponse(VolleyError volleyError) {
                 Log.i("aa", "post请求失败" + volleyError.toString());
             }
         }) {
             @Override
             protected Map<String, String> getParams() throws AuthFailureError {
                 HashMap<String, String> map = new HashMap<>();
                 map.put("key", "bb97bfce9edee938aeac99cb503b76db");
                 map.put("cardno", "43052419910615");
                 return map;
             }
         };
        mQueue.add(request);
  

上面用到的是StringRequest,下面学习一下JsonRequest

JsonRequest的用法

JsonRequest是一个抽象类,无法直接创建它的实例,但是它有两个直接的子类,JsonObjectRequest和JsonArrayRequest。
用法跟StringRequest差不多

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);  
            }  
        }); 

volley加载网络图片用法也类似,只是传的参数不同

相关文章

网友评论

      本文标题:安卓学习笔记-----Volley框架学习

      本文链接:https://www.haomeiwen.com/subject/cizuixtx.html