Volley异步请求库

Volley简介:

我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。Volley的一个很大的特色,就是所有的网络请求无需开发者自己执行,而是在请求构造完成后扔到Volley的请求队列中,队列依次进行请求,这样就省去了很多麻烦,开发者也不用担心网络请求是否会冲突,是否会在主线程,这些烦心事Volley的网络队列都帮我们解决了。

不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

下载及应用Volley.jar:

第一步:到网上搜索Volley.jar,下载即可

第二步:

这样就完成了jar包的配置

使用Volley:

1.创建请求队列RequestQueue:RequestQueue mQueue = Volley.newRequestQueue(context);

2.创建请求:StringRequest stringRequest = new StringRequest("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);
                            }
                        });
3.将第二步中的请求加入第一步中的请求队列:mQueue.add(stringRequest);

这三步就完成了网络请求,真的挺简单的!

上面的这种方法只是用于get请求,还有一种创建post请求,如下:

StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener);

具体实现:StringRequest request = new StringRequest(
                Request.Method.POST,
                "http://foo.cloudant.com/_session",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
 
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
 
                    }
                }
        ) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {  //设置头信息
                Map<String, String> map = new HashMap<String, String>();
                map.put("Content-Type", "application/x-www-form-urldecoded");
                return map;
            }
 
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {  //设置参数
                Map<String, String> map = new HashMap<String, String>();
                map.put("name", "foo");
                map.put("password", "bar");
                return map;
            }
        };

小demo:

代码如下:

package com.example.yzg.highui;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class VolleyActivity extends AppCompatActivity {
    Button mgetrequest;
    public static RequestQueue requestQueue;
    StringRequest stringRequest;
    TextView textView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley);
        mgetrequest = findViewById(R.id.getrequest);
        textView = findViewById(R.id.text_response);


        mgetrequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                doRequest();

            }

        });
}

        private void doRequest() {

            requestQueue = Volley.newRequestQueue(VolleyActivity.this);
            stringRequest = new StringRequest("https://www.baidu.com", new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("测试", "onResponse: " + response);
                    textView.setText(response);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("测试", "onErrorResponse: " + error);
                }
            });


            requestQueue.add(stringRequest);

        }

}

 

基本上这两种用法就足够请求文本文件的信息了,剩下的还有一个照片请求,在接下来的一篇博客中做笔记。
 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值