Volley不完全解析
来源:互联网 发布:ubuntu安装exe 编辑:程序博客网 时间:2024/05/18 09:24
Volley:适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。解析后直接运行在主线程。
okhttp:能直接得到response对象,能进行大文件的下载。
StringRequest,JsonObjectRequest,ImageRequest的用法
此三种用法类似,,以StringRequest为例一般包括三个步骤:
- 创建一个RequestQueue对象。
- 创建一个StringRequest对象。
- 将StringRequest对象添加到RequestQueue里面。
public void button1(View view) { RequestQueue queue = Volley.newRequestQueue(this); //POST请求// StringRequest stringRequest = new StringRequest(Request.Method.POST, url, listener, errorListener); //参数 GET请求 url,success callback , failure callback StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String s) { Log.d("TAG", s); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { //参数 String tag ,String message,throwable Log.e("TAG", volleyError.getMessage(), volleyError); } }); queue.add(request); }
ImageLoader用法:
1. 创建一个RequestQueue对象。
2. 创建一个ImageLoader对象。
3. 获取一个ImageListener对象。
4. 调用ImageLoader的get()方法加载网络上的图片。
public void button4(View view) {/* RequestQueue queue = Volley.newRequestQueue(this);// ImageLoader imageLoader = new ImageLoader(queue, new ImageLoader.ImageCache() {// @Override// public void putBitmap(String url, Bitmap bitmap) {// }//// @Override// public Bitmap getBitmap(String url) {// return null;// }// }); ImageLoader imageLoader = new ImageLoader(queue, new BitmapCache()); //加载过程中的图片 失败后显示的图片 ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher); imageLoader.get("http://img.my.csdn.net/uploads/201407/17/1405567749_8669.jpg", listener);*/ VolleyUtil.image_load("news_1.jpg",imageView); //封装后仅仅一行代码 }
new ImageLoader.ImageCache(){}为空,则不会压缩图片。
编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。BitmapCache类能高效加载大图。
import android.graphics.Bitmap;import android.util.LruCache;import com.android.volley.toolbox.ImageLoader;/** * Created by Administrator on 2016/11/7. */public class BitmapCache implements ImageLoader.ImageCache{ private LruCache<String, Bitmap> mCache; public BitmapCache() { int maxSize = 10 * 1024 * 1024;//最大高宽 超过这个就会压缩 mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); }}
NetworkImageView控件加载图片
1. 创建一个RequestQueue对象。
2. 创建一个ImageLoader对象。
3. 在布局文件中添加一个NetworkImageView控件。
4. 在代码中获取该控件的实例。
5. 设置要加载的图片地址。
//NetworkImageView并不需要提供任何设置最大宽高的方法也能够对加载的图片进行压缩 public void button5(View view) { RequestQueue queue = Volley.newRequestQueue(this); ImageLoader imageLoader = new ImageLoader(queue, new BitmapCache()); e_imageView.setDefaultImageResId(R.mipmap.ic_launcher); e_imageView.setErrorImageResId(R.mipmap.ic_launcher); e_imageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", imageLoader); }
将Volley工具封装:
import android.content.Context;import android.graphics.Bitmap;import android.util.Log;import android.widget.ImageView;import android.widget.Toast;import com.android.volley.AuthFailureError;import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.ImageRequest;import com.android.volley.toolbox.StringRequest;import com.android.volley.toolbox.Volley;import java.util.Map;/** * Created by Administrator on 2016/11/8. */public class VolleyUtil { private static RequestQueue queue; private static Context context; private static String path = "http://169.254.63.97:8080/BookBox/servlet/"; private static String iamge_path = "http://169.254.63.97:8080/BookBox/drawable/"; public static RequestQueue getRequestQueue(Context context){ VolleyUtil.context=context; if (queue == null){ queue = Volley.newRequestQueue(context); } return queue; } public static void DoGet(String classname, Map<String,String> omap){ StringBuilder builder = new StringBuilder(path); builder.append(classname).append("?"); for (Map.Entry<String,String> str:omap.entrySet()){ String key = str.getKey(); String value = str.getValue(); builder.append(key).append("=").append(value).append("&"); } builder.deleteCharAt(builder.length()-1); StringRequest request = new StringRequest(builder.toString(), new Response.Listener<String>() { @Override public void onResponse(String s) { resultInfo.result(s); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.e("TAG", volleyError.getMessage(), volleyError); Toast.makeText(context, "加载失败", Toast.LENGTH_SHORT).show(); } }); queue.add(request); } public interface ResultInfo{ public void result(String info); public void result_bitmap(Bitmap bitmap); } public static ResultInfo resultInfo; public static void setResultInfo(ResultInfo resultInfo){ VolleyUtil.resultInfo= resultInfo; } public static void DoPost(String classname, final Map<String,String> oMap){ StringBuilder builder = new StringBuilder(path); builder.append(classname); StringRequest request = new StringRequest(Request.Method.POST, builder.toString(), new Response.Listener<String>() { @Override public void onResponse(String s) { VolleyUtil.resultInfo.result(s); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(context, "下载失败", Toast.LENGTH_SHORT).show(); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { return oMap; } }; queue.add(request); } public static void image_Requst(String image_name){ StringBuilder builder = new StringBuilder(iamge_path); builder.append(image_name); ImageRequest request = new ImageRequest(builder.toString(), new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { VolleyUtil.resultInfo.result_bitmap(bitmap); } }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(context, "获取图片失败", Toast.LENGTH_SHORT).show(); } }); queue.add(request); } public static void image_load(String image_name,ImageView imageView){ ImageLoader loader = new ImageLoader(queue,new BitmapCache()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher,R.mipmap.ic_launcher); loader.get(new StringBuilder(iamge_path).append(image_name).toString(),listener); }}
其中path,image_path地址自行修改。
参考:http://blog.csdn.net/sinyu890807/article/details/17482095
0 0
- Volley不完全解析
- 【Volley】Volley源码解析
- volley 解析
- Volley解析
- Volley解析
- Volley 解析
- Volley解析
- Volley 解析
- Volley解析
- C#解析manifest,不完全
- caret包函数不完全解析
- Volley解析json(三)
- Android Volley完全解析
- Android Volley完全解析
- volley源码解析
- Volley 源码解析
- Volley 源码解析
- Volley 源码解析
- POJ 2236 - Wireless Network(并查集)
- Visio 2013 由于形状保护、容器和/或图层属性的设置,无法完全执行此命令
- 09-链接标签
- eclipse在ubuntu16.04无法设置以及新建工程卡死解决方案
- 基本控件
- Volley不完全解析
- 四舍五入与 银行家算法
- 神采奕奕
- 文章标题
- powermock、hadoop、Concordion、Java 8教程
- ListView详解
- APM飞控学习之路:4 源码裁剪与下载
- 三行代码实现贝塞尔曲线
- html5-访问历史记录