Volley使用:Volley是Android平台上的网络通信库,能使网络通信更快、更简单、更健壮
Volley使用了典型的模板回调机制
实现Get,Post请求,上传json字符串,Volley的图片下载
RequestQueue :管理全局请求的单例,最好全局只有一个
StringRequest :文本的请求,下载字符串的时候需要创建的对象
Response.Lisenter:正确的结果回调
Response.ErrorLisenter:错误的结果回调
Get请求:3步骤
* 1.创建RequestQueue
* 2.创建相应的文本请求对象
* 3.将请求的文本对象加入到队列中,然后结果在参数中一接口回调到方式返回回来
实际代码:
1.queue = Volley.newRequestQueue(this);
2. private void getDataString(String str) {
//2.创建stringrequest对象:1.请求网址2.正确响应到回调3.错误响应的回调
StringRequest strRequest = new StringRequest(str, new Response.Listener() {
@Override
public void onResponse(String s) {
Log.i(">>>>", ">>>" + s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
3.queue.add(strRequest);
此处的错误:1.未加网络权限
Post请求:3步骤
* 1.创建RequestQueue
* 2.创建相应的文本请求对象,设置post请求方式,复写getParams()(唯一的不同点)
* 3.将请求的文本对象加入到队列中,然后结果在参数中一接口回调到方式返回回来
private void postDataString(String s) {
//2.创建一个post的请求对象:1.请求方式2.请求网址3.正确响应的回调4.错误响应的回调
StringRequest strpost=new StringRequest(Request.Method.POST, s, new Response.Listener() {
@Override
public void onResponse(String response) {
Log.i(">>>",">>>"+response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map getParams() throws AuthFailureError {
//aid=3550910 msg="data" username="匿名用户"
HashMap map=new HashMap<>();
map.put("aid","3550910");
map.put("msg","yours comment");
map.put("username","匿名用户");
return map;
}
};
上传json字符串
* JSONObjectRequest-----JOSNObject
* 1.创建RequestQueue
* 2.创建相应的JSONObjectRequest
* 3.将请求的JSONObjectRequest加入到队列中,然后结果在参数中一接口回调到方式返回回来
* JSONArrayObjectRequest
1.queue = Volley.newRequestQueue(this);
2.private void jsonDataObject(String path) {
//用于上传json,1.参数请求网址2,上传的json对象3,正确的响应回调4,错误结果的响应
JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST,path, null, new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
try {
int code=response.getInt("retcode");
Log.i(">>>",">>>"+code);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
3.queue.add(jsonObjectRequest);
* ImageRequest:图片下载的请求
* ImageLoader:图片下载请求,可以让你扩张内存缓存
* NetworkImageView:view里面的自定义控件,将工具内置到空间里面,直接使用方法进行图片的下载
*InageRequest的使用步骤:
* 1.创建请求队列
* 2.创建图片的下载请求ImageRequest对象;
* 3.将创建的对象添加的队列中
//2.图片请求的六个参数:
//1.图片请求网址2.图片下载成功的回调3.图片下载最大宽度4,图片下载最大高度(当下载当图片超过
// 你所设定的值的时候,会去压缩到你指定到值)
//5.图片到格式或者参数:RGB_8888每个像素点占4个字节 RGB_565每个像素点占2个字节
//6.错误图片下载的回调
final ImageRequest imageRequest = new ImageRequest(url, new Response.Listener() {
@Override
public void onResponse(Bitmap bitmap) {
if (bitmap != null) {
imageview.setImageBitmap(bitmap);
}
}
}, 100, 100, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
queue.add(imageRequest);
/**
* volley使用ImageLoader进行图片下载
* @param path
*/
private void getImageLoader(String path) {
//1.创建ImageLoader,1.请求队列 2.提供缓存的接口(可以借助LruCache这个类来实现)
ImageLoader loader=new ImageLoader(queue, new MyImageCache());
//2.创建Listener管理图片下载中的设置
//1.图片下载显示的控件2.图片下载中的默认图片资源int 3.图片下载失败的资源int
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imaShow, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
//3.调用loader图片下载方法
loader.get(path,listener,100,100);
}
自己建一个MyImageCache;
面试必问:
* 实现volley提供的缓存接口,借助LruCache做内存缓存
* volley本身只提供磁盘缓存
*
* LruCache
* 1.android提供做内存缓存,是一个链表结构《key,vlaue》
* 2.内存缓存的大小由你进行分配
* 3.内置算法:当你所加入进来的东西,超过所限制的容量,那么会自动移除,最近使用频率交少的,然后将新的加入进来
* 4.它的读取速率较于网络和dscard时最快的,但是容量时最小的
*/
public class MyImageCache implements ImageLoader.ImageCache {
//1.将LruCache对象创建
private LruCache lruCache;
public MyImageCache() {
//传一个内存大小的值
int size = 4 * 1024 * 1024;//定值
//拿到运行内存的多少,分配给内存缓存
int sizeMax = (int) (Runtime.getRuntime().maxMemory() / 8);
lruCache = new LruCache(sizeMax) {
@Override
protected int sizeOf(String key, Bitmap value) {
//复写sizeof方法,将传进来的值,进行计算
return value.getByteCount();
}
};
}
@Override
public Bitmap getBitmap(String url) {
//get 从缓存中拿到资源
return lruCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
//put 将资源放到缓存中
lruCache.put(url, bitmap);
}
}
volley NetWorkImageView
* 自定义的控件,将下载的工具,内置到了控件里面
*
* 使用步骤:
* 1.在布局文件里面书写该控件
* 2.在代码里面找到控件,并且设置相应
* 3.调用显示图片的方法
1. 在布局里面添加,输入前面几个几个关建字母
2. queue = Volley.newRequestQueue(this);
//1.将自定义控件找到
networImageview = (NetworkImageView) findViewById(R.id.networkimg);
3.
//设置图片默认资源
networImageview.setDefaultImageResId(R.mipmap.ic_launcher);
//设置图片下载失败的资源
networImageview.setErrorImageResId(R.mipmap.ic_launcher);
//1.图片下载地址2.ImageLoader
ImageLoader imageLoader=new ImageLoader(queue, new MyImageCache());
4.
//显示图片的方法
networImageview.setImageUrl(path,imageLoader);