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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

William_Tao(攻城狮)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值