volley 学习

Volley是谷歌官方推出的一个网络操作框架。

下面介绍下Android使用Volley进行Post和GET请求数据的方法和步骤:

private Context mContext;

    private RequestQueue mRequestQueue;

    private StringRequest mStringRequest;



    // 利用Volley实现Post请求

    private void volley_post() {

        String url = "http://aplesson.com/wap/api/user.php?action=login";

        mContext = this;

        mRequestQueue = Volley.newRequestQueue(mContext);

        mStringRequest = new StringRequest(Method.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) {

                        System.out.println("请求错误:" + error.toString());

                    }

                }) {

            // 携带参数

            @Override

            protected HashMap<String, String> getParams()

                    throws AuthFailureError {

                HashMap<String, String> hashMap = new HashMap<String, String>();

                hashMap.put("un", "852041173");

                hashMap.put("pw", "852041173abc");

                return hashMap;

            }



            // Volley请求类提供了一个 getHeaders()的方法,重载这个方法可以自定义HTTP 的头信息。(也可不实现)

            public Map<String, String> getHeaders() throws AuthFailureError {

                HashMap<String, String> headers = new HashMap<String, String>();

                headers.put("Accept", "application/json");

                headers.put("Content-Type", "application/json; charset=UTF-8");

                return headers;

            }



        };



        mRequestQueue.add(mStringRequest);



    }



    private JsonObjectRequest mJsonObjectRequest;



    // 利用Volley实现Json数据请求

    private void volley_json() {

        mContext = this;

        String url = "http://aplesson.com/data/101010100.html";

        // 1 创建RequestQueue对象

        mRequestQueue = Volley.newRequestQueue(mContext);

        // 2 创建JsonObjectRequest对象

        mJsonObjectRequest = new JsonObjectRequest(url, null,

                new Response.Listener<JSONObject>() {

                    @Override

                    public void onResponse(JSONObject response) {

                        System.out.println("请求结果:" + response.toString());

                    }

                }, new Response.ErrorListener() {

                    @Override

                    public void onErrorResponse(VolleyError error) {

                        System.out.println("请求错误:" + error.toString());

                    }

                });



        // 3 将JsonObjectRequest添加到RequestQueue

        mRequestQueue.add(mJsonObjectRequest);



    }



    // 利用Volley实现Get请求

    private void volley_get() {

        mContext = this;

        String url = "http://www.aplesson.com/";

        // 1 创建RequestQueue对象

        mRequestQueue = Volley.newRequestQueue(mContext);

        // 2 创建StringRequest对象

        mStringRequest = new StringRequest(url,

                new Response.Listener<String>() {

                    @Override

                    public void onResponse(String response) {

                        System.out.println("请求结果:" + response);

                    }

                }, new Response.ErrorListener() {

                    @Override

                    public void onErrorResponse(VolleyError error) {

                        System.out.println("请求错误:" + error.toString());

                    }

                });

        // 3 将StringRequest添加到RequestQueue

        mRequestQueue.add(mStringRequest);

    }

Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。JsonObjectRequest:返回JSON对象。

JsonArrayRequest:返回JsonArray。

StringRequest:返回String,这样可以自己处理数据,更加灵活。

另外可以继承Request<T>自定义Request。

 

1.3 取消Request

      Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,Activity被结束了,此时如果继续使用其中的Context等,除了无辜的浪费CPU,电池,网络等资源,有可能还会导致程序crash,所以,我们需要处理这种一场情况。使用Volley的话,我们可以在Activity停止的时候,同时取消所有或部分未完成的网络请求。Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。Volley支持多种request取消方式。
1)可以针对某些个request做取消操作:
@Override

    public void onStop() {

        for (Request <?> req : mRequestQueue) {

            req.cancel();

        }

    }

2)取消这个队列里的所有请求:

@Override

    protected void onStop() {

        // TODO Auto-generated method stub

        super.onStop();

        mRequestQueue.cancelAll(this);

    }

3)可以根据RequestFilter或者Tag来终止某些请求

 @Override

    protected void onStop() {

        // TODO Auto-generated method stub

        super.onStop();



        mRequestQueue.cancelAll( new RequestFilter() {});

        or

        mRequestQueue.cancelAll(new Object());

    }

Volley支持http的GET、POST、PUT、DELETE等方法。


转载:http://www.aplesson.com/?p=525

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值