volley入门学习(一)

Volley学习

一、Volley介绍

Volley是一个网络通信框架,在2013年的Google I/O被推出。

Volley是一个优秀的网路访问框架,即可以通过它访问普通的网络数据,如JSON格式的数据,也可以下载图片。

数据量不大,但网络通信频繁的,因此非常适合使用Volley。

数据量的网络操作,比如说下载文件等,不建议使用。

二、 使用步骤

1.添加依赖

implementation 'com.android.volley:volley:1.1.1'

2.配置网络环境(AndroidMainfest.xml)

<uses-permission android:name="android.permission.INTERNET" />

3.使用

3 .1创建请求队列

参数为context

 RequestQueue requestQueue= Volley.newRequestQueue(getApplicationContext());
3.2 创建HTTP请求

一共3个参数 1.url 2.请求成功回调函数 3请求失败回调函数

StringRequest stringRequest=new StringRequest("https://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.d("TAG", error.getMessage(),error);
    }
}
);
3.3将请求加入到请求队列当中
requestQueue.add(stringRequest);

结果(百度首页的html源码)

#三、 post请求

介绍完上述代码,你对Volley已经有了初步的认识,但是上面的代码可以看出是个get请求,如果想要请求post请求怎么办呢?下面就简单介绍一下如何请求post吧

StringRequest stringRequest=new StringRequest(Request.Method.POST, "https://www.baidu.com", new Listener<String>() {
    @Override
    public void onResponse(String response) {
        Log.d("TAG", response);
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.d("TAG", error.getMessage(),error);
    }
}){
    //重写getParams,用于给post请求传参数
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> map = new HashMap<String, String>();
        map.put("params1", "value1");
        map.put("params2", "value2");
        return map;

    }
};

可以看出来和get最大的区别有两点:

1.在StringRequest的方法中多了个参数Request.Method.POST,用于指定请求为Post

2.重写getParams方法,用于给post请求传递参数使用的

四、 JsonRequest

学完了最基本的StringRequest的用法,我们再来进阶学习一下JsonRequest的用法。类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧,一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。

1.后端地址数据

http://10.138.154.240:8084/yibole/getAllRecruiters

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FuzBzauV-1607527656126)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201209002112872.png)]

2.JsonRequest发起请求

JsonRequest jsonRequest=new JsonObjectRequest("http://10.138.154.240:8084/yibole/getAllRecruiters", 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);
    }
});

3.遇到的问题

在请求我后端写的json数据的时候,出现了一下两种问题

3.1问题一

在这里插入图片描述
在这里插入图片描述

解决方案:

一开始我直接访问结果报一下错误,后来查资料发现Android 9.0是默认禁止所有http请求的,需要在代码中设置如以下代码才可以正常进行网络请求,如果想用http请求就需要添加

android:usesCleartextTraffic="true"
3.2问题二

本来我一开始访问的后端地址为:http://localhost:8084/yibole/getAllRecruiters

结果。。。

在这里插入图片描述

解决方案:

cmd->ipconfig 查找ipv4地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFVGyCx6-1607527656136)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201209002907985.png)]

将localhost换成ipv4地址的地址即可

五、ImageRequest

1.介绍

故名思意,可知改方法主要是为了获取网络图片的,和ImageLoader 一样目的都是相同的,那么具体步骤和前面介绍的几个方法一样,要先创建消息队列,然后创建ImageRequest(包含的url,请求失败,请求成功的回调函数)

这里区别与上面讲述的,这里的回调函数是直接new Listener(){} 而不是new Response.Listener

2.代码

/**
 * ImageRequest方法访问图片
 */
public  void ImageRequestMethod(){
    imageRequest = new ImageRequest("http://pic.2265.com/upload/2017-4/2017414114518780.jpg", new Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap response) {
            Log.d("sa", "onBitmapResponse: "+response);
            //在此处将网络获取的结果通过imageview提供的setImageBitmap来设置图片显示出来
            imageView.setImageBitmap(response);
        }
    }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("sa", "onErrorResponse: "+error);
            //加载错误默认为
            imageView.setImageResource(R.drawable.default_img);
        }
    });
}

六、ImageLoader

1.优点

ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。

2.步骤

  1. 创建一个RequestQueue对象。

  2. 创建一个ImageLoader对象。

  3. 获取一个ImageListener对象。

  4. 调用ImageLoader的get()方法加载网络上的图片。

3.分析

首先我们需要创建ImageLoader对象(参数为消息队列,和ImageCache),其次我们需要通过ImageLoader得到ImageListener(包含ImageView控件,默认图片资源,加载网络请求失败默认图片),最后通过创建的ImageLoader的get方法(包含,网络图片url和第二步的监听事件)

4.代码

//创建请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
/**
 * ImageLoader方法
 */
public void ImageLoaderMethod(){
    //1.创建ImageLoader
     imageLoader=new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
        @Override
        public Bitmap getBitmap(String url) {

            return null;
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {

        }
    });
     //2.ImageLoader.getImageListener
    ImageLoader.ImageListener listener =ImageLoader.getImageListener(imageView,R.drawable.default_img,R.drawable.ic_launcher_background);
    //3.
    imageLoader.get("https://img-blog.csdnimg.cn/20201201233652605.png", listener,200,600);
}

在这里插入图片描述

七、交流群

优秀的Android视频和书籍资料网盘免费分享,技术一起交流
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Volley是一个优秀的安卓开源网络访问工具,这里包含了volley jar包和源码,版本是2015.07.28的1.0.18版本。更多资料可以参见volley的github地址: https://github.com/mcxiaoke/android-volley 1.0.18 2015.07.28 merge upstream, process response bodies only when present tweak getCacheKey(), using method and original url, fix #67 #78 add RedirectError, wrong exception for http 301 and 302, fix #51 make NetworkResponse Serializable, fix #53 create NetworkError using IOException, not using null response 1.0.17 2015.07.13 merge upstream, stop logging slow requests outside of debug logs merge pr #64, fix leaking the last request object 1.0.16 2015.05.18 fix duplicate retry, change DEFAULT_MAX_RETRIES to 0 merge pr, fix NegativeArraySizeException merge upstream, Use a BufferedOutputStream to read and write cache 1.0.15 2015.03.18 add two missing constructors for JsonArrayRequest and JsonObjectRequest add unique identifier for Request 1.0.14 2015.03.17 add more constructors for JsonArrayRequest and JsonObjectRequest update and fix gradle build, using new build.gradle 1.0.13 2015.03.16 merge pr, added constructor to JSONArrayRequest 1.0.12 2015.03.12 merge upstream, fix ImageLoader.getCacheKey() merge upstream, Fix broken DiskBasedCache merge upstream, Modify header parser to handle must-revalidate. 1.0.11 2015.03.03 merge upstream, Add a RequestFinishedListener to RequestQueue. merge upstream, Change the default character encoding for JSON responses to UTF-8 1.0.10 2014.12.30 merge upstream, Use the view size and scale type to restrict NIV requests. merge pr, Add a getImageURL method to NetworkImageView merge pr, Add the options of setting DiskBasedCache sizes in Volley.java 1.0.9 2014.11.26 merge upstream, Fix deprecation warnings (now errors in 0.14.4) w/ gradle. 1.0.8 2014.11.07 merge upstream, Metric for network time and getBackoffMultiplier() 1.0.7 2014.10.13 merge upstream, Add locale to HttpHeaderParserTest.rfc1123Date(long millis) merge upstream, Copy cache header for 304 response 1.0.6 2014.09.10 merge pr, fixed bug where Disk cache misses for redirects merge upstream, Fix crash/OOM in DiskBasedCache merge upstream, allow use of custom ImageRequests in ImageLoader 1.0.5 2014.06.18 merge upstream, Fixes bug in PATCH method. Sets the method before setting the body. update gradle and build tools version, fix build 1.0.4 2014.05.04 merge upstream, Guard against NullPointerException currently occurring in Volley when a Request is given a url whose host is null. 1.0.3 2014.04.01 merge upstream, ImageLoader: setError after null check 1.0.2 2014.02.28 merge upstream, Use the view size to restrict NIV requests. merge upstream, Fix generic type parameter for RequestQueue.add(Request) merge pr, added support for handling 301 and 302 http redirects using standalone deploy gradle build file and script 1.0.1 2014.02.13 add gradle build support, add readme, release using gradle 1.0.0 2014.01.03 create volley mirror at github, release first version

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

William_Tao(攻城狮)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值