android volley,Android - 网络请求之Volley

4f605a64df9b

老婆保佑,代码无BUG

目录

引入

使用

文字信息处理

get请求

post请求

图片下载

封装Volley

一. 引入

compile 'com.mcxiaoke.volley:library:1.0.19'

二.使用

1.文字信息处理

发送StringRequest请求(掌握)

GET

public void btn(View view) {

RequestQueue queue = Volley.newRequestQueue(this);

String url = "http://apis.juhe.cn/mobile/get?phone=18856907654&key=5778e9d9cf089fc3b093b162036fc0e1";

// 一,创建请求队列对象,通常情况下,一个类中(或者说一个工程中)保持 始终使用同一个RequestQueue对象即可

/**

* 1. int 类型 用于指定请求的方式(如GET或者POST)

* 2. String类型 用于指定网络请求要连接的网址

* 3. Listener类型 ,接收网络响应的接口,即只要得到本次请求对应的返回结果

* 就会运行此接口中的onResponse方法

* 4: ErrorListener类型, 用于接收当网络请求的过程中一旦发生了什么错误,

* 就会调用本接口中的onErrorResponse方法

* */

StringRequest stringRequest = new StringRequest(StringRequest.Method.GET,url, new Response.Listener() { Response.Listener() {

@Override

public void onResponse(String response) {

Logger.e("response-->" + response);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Logger.e("response-->" + error.getMessage());

}

});

//三,给请求对象设置tag标识

stringRequest.setTag("get");

//四,将请求添加到请求队列中,执行网络请求

queue.add(stringRequest);

}

返回结果

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ Thread: main

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ MainActivity$1.onResponse (MainActivity.java:41)

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ MainActivity$1.onResponse (MainActivity.java:44)

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ response-->{"resultcode":"200","reason":"Return Successd!","result":{"province":"安徽","city":"合肥","areacode":"0551","zip":"230000","company":"移动","card":""},"error_code":0}

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────

POST请求

public void btn(View view) {

RequestQueue queue = Volley.newRequestQueue(this);

String postUrl = "http://apis.juhe.cn/mobile/get";

StringRequest stringRequest = new StringRequest(StringRequest.Method.POST, postUrl, new Response.Listener() {

@Override

public void onResponse(String response) {

Logger.e("response-->" + response);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Logger.e("response-->" + error.getMessage());

}

}) {

/**

* Post请求和Get请求的使用步骤上的区别在于请求条件的指定

* 必须在StringRequest对象的后面添加{},并且

* 在{}内重写getParams方法,该方法的返回值就是所有的请求条件

* */

@Override

protected Map getParams() throws AuthFailureError {

//将请求条件封装到map对象中

Map map = new HashMap<>();

map.put("phone", "18856907654");

map.put("key", "5778e9d9cf089fc3b093b162036fc0e1");

return map;

}

};

//三,给请求对象设置tag标识

stringRequest.setTag("get");

//四,将请求添加到请求队列中,执行网络请求

queue.add(stringRequest);

}

发送JsonObjectRequest请求(了解)

区别于StringRequest,特点在于:请求的结果直接被定义为一个JsonObject类型

2. 图片下载

单张图片下载

public void btn(View view) {

queue = Volley.newRequestQueue(this);

ImageRequest imageRequest = new ImageRequest(

"https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2019270811,1269730008&fm=27&gp=0.jpg", //对应图片的下载地址

new Response.Listener() {

@Override

public void onResponse(Bitmap response) {

Logger.e("response---->" + response);

}

}, 200, 200,// 指定下载后图片的最大宽高

ImageView.ScaleType.FIT_XY,//指定图片的缩放模式

Bitmap.Config.ARGB_8888,//指定图片的编码格式

new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Logger.e("error--->" + error);

}

});

queue.add(imageRequest);

}

多张图片下载

定义ImageCache

package com.allens.volleydemo;

import android.graphics.Bitmap;

import android.util.LruCache;

import com.android.volley.toolbox.ImageLoader;

/**

* .分配一定内存空间,专门存取图片,一般为内存大小的1/8

* Created by allens on 2017/11/28.

*/

public class MyImageCache implements ImageLoader.ImageCache {

private LruCache mCache;

public MyImageCache() {

//分配最大内存空间的1/8

long maxMemory = Runtime.getRuntime().maxMemory() / 8;

mCache = new LruCache((int) maxMemory) {

@Override

protected int sizeOf(String key, Bitmap value) {

//得到当前图片的大小

return value.getByteCount();

}

};

}

@Override

public Bitmap getBitmap(String url) {

return mCache.get(url);

}

@Override

public void putBitmap(String url, Bitmap bitmap) {

if (getBitmap(url) == null)

mCache.put(url, bitmap);

}

}

使用 ImageLoader

ImageLoader loader = new ImageLoader(queue, new MyImageCache());

loader.get("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2019270811,1269730008&fm=27&gp=0.jpg", //图片的下载路径

//通过getImageListener方法获取ImageListener接口对象

/*

* 参数1: 图片下载完成后,由哪个控件显示图片

* 参数2:设置图片下载过程中显示的默认图片

* 参数3: 设置一旦图片下载出错,就显示出错提示图片

* */

ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher)

, 200, 200, //图片的最大宽高

ImageView.ScaleType.FIT_XY //图片的缩放模式

)

三.封装

4f605a64df9b

快醒醒

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值