标签:
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<String>() { @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<String>() { @Override public void onResponse(String response) { Log.i(">>>",">>>"+response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { //aid=3550910 msg="data" username="匿名用户" HashMap<String,String> 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<JSONObject>() { @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<Bitmap>() { @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本身只提供磁盘缓存 * <p/> * LruCache * 1.android提供做内存缓存,是一个链表结构《key,vlaue》 * 2.内存缓存的大小由你进行分配 * 3.内置算法:当你所加入进来的东西,超过所限制的容量,那么会自动移除,最近使用频率交少的,然后将新的加入进来 * 4.它的读取速率较于网络和dscard时最快的,但是容量时最小的 */ public class MyImageCache implements ImageLoader.ImageCache { //1.将LruCache对象创建 private LruCache<String, Bitmap> lruCache; public MyImageCache() { //传一个内存大小的值 int size = 4 * 1024 * 1024;//定值 //拿到运行内存的多少,分配给内存缓存 int sizeMax = (int) (Runtime.getRuntime().maxMemory() / 8); lruCache = new LruCache<String, Bitmap>(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);
标签:
原文地址:http://blog.csdn.net/xdf0101/article/details/51919543