学习使用Volley的多种基本功能-来自官方文档
2015-05-12 20:26
381 查看
官方文档地址:https://developer.android.com/training/volley/requestqueue.html
之前一直没看到这个,原来官方已经正式有关于Volley的文档了,而且这是被建议使用的Network库。
因为之前有写过简单的Volley请求怎么写,下面介绍的都是我之前不知道的用法:
1.先上代码:
这时,我们看到,建立了一个缓存区,同时使用了封装好的网络请求,注意,此时跟原来不同的问题来了,这里自定义的请求队列需要自己启动(start),其他操作相同。
2.使用一个单例来包装上述过程
这样,就可以使用这个来请求很多不同的请求了,虽然在某些时候缓存不大有用。
3.如何加载图片请求
但是注意此时ImageRequest已经过期。
4.使用ImageLoader和ImageView
5.使用ImageLoader和NetworkImageView(都由Volley提供)
6.自定义一些LruCache,并结合ImageCache
还有Json的Request,以前介绍过了,就不再叙述了。
7.自定义Request
由于volley中实现了三种基本请求 : string / image / json的请求,所以除了这三种基本请求之外,你如果还想要请求其他数据,可以自定义Request。
下面是文档中的Gson请求的写法:
Gson是google开发的一种(Gson is a Java library that can be used to convert Java Objects into their JSON representation.)用于Java类和Json格式相互转化的工具,项目地址https://code.google.com/p/google-gson/
之前一直没看到这个,原来官方已经正式有关于Volley的文档了,而且这是被建议使用的Network库。
因为之前有写过简单的Volley请求怎么写,下面介绍的都是我之前不知道的用法:
1.先上代码:
Cache cache = new DiskBasedCache(getCacheDir(),1024*1024); Network network = new BasicNetwork(new HurlStack()); RequestQueue requestQueue = new RequestQueue(cache,network); requestQueue.start(); StringRequest stringRequest = new StringRequest(Request.Method.GET,"http://www.baidu.com",new Response.Listener<String>() { @Override public void onResponse(String s) { Log.i("TAG",s); } },new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.e("TAG",""+volleyError); } }); requestQueue.add(stringRequest);
这时,我们看到,建立了一个缓存区,同时使用了封装好的网络请求,注意,此时跟原来不同的问题来了,这里自定义的请求队列需要自己启动(start),其他操作相同。
2.使用一个单例来包装上述过程
public class MySingleton { private RequestQueue mRequestQueue; private static MySingleton mInstance; private ImageLoader mImageLoader; private Context mContext; private MySingleton(Context context){ mContext = context; mRequestQueue = getRequestQueue(); mImageLoader = new ImageLoader(mRequestQueue,new ImageLoader.ImageCache() { private final LruCache<String,Bitmap> cache = new LruCache<>(20); @Override public Bitmap getBitmap(String s) { return cache.get(s); } @Override public void putBitmap(String s, Bitmap bitmap) { cache.put(s,bitmap); } }); } public RequestQueue getRequestQueue() { if(mRequestQueue == null){ mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext()); } return mRequestQueue; } public static synchronized MySingleton getInstance(Context context) { if (mInstance == null){ mInstance = new MySingleton(context); } return mInstance; } public <T> void addToRequestQueue(Request<T> req){ getRequestQueue().add(req); } public ImageLoader getImageLoader() { return mImageLoader; } }
这样,就可以使用这个来请求很多不同的请求了,虽然在某些时候缓存不大有用。
3.如何加载图片请求
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView imageView = (ImageView)findViewById(R.id.image); String url = "http://p2.zhimg.com/10/7b/107bb4894b46d75a892da6fa80ef504a.jpg"; ImageRequest request = new ImageRequest(url,new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { imageView.setImageBitmap(bitmap); } },0,0,null,new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.i("TAG","Error"); } }); MySingleton.getInstance(this).addToRequestQueue(request); } }
但是注意此时ImageRequest已经过期。
4.使用ImageLoader和ImageView
ImageLoader imageLoader = MySingleton.getInstance(this).getImageLoader(); imageLoader.get(url,ImageLoader.getImageListener(imageView,R.drawable.zhanwei,android.R.drawable.stat_notify_error));
5.使用ImageLoader和NetworkImageView(都由Volley提供)
String IMAGE_URL = "https://avatars0.githubusercontent.com/u/9381246?v=3&s=460"; NetworkImageView imageView = (NetworkImageView)findViewById(R.id.image); ImageLoader imageLoader = MySingleton.getInstance(this).getImageLoader(); imageView.setImageUrl(IMAGE_URL,imageLoader);
6.自定义一些LruCache,并结合ImageCache
public class LruBitmapCache extends LruCache<String,Bitmap> implements ImageLoader.ImageCache { public LruBitmapCache(int maxSize) { super(maxSize); } public LruBitmapCache(Context context){ this(getCacheSize(context)); } public static int getCacheSize(Context context) { final DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); final int screenWidth = displayMetrics.widthPixels; final int screenHeight = displayMetrics.heightPixels; final int screenBytes = screenHeight * screenWidth * 4; return screenBytes*3; } @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } @Override public Bitmap getBitmap(String s) { return get(s); } @Override public void putBitmap(String s, Bitmap bitmap) { put(s,bitmap); } }
ImageView imageView = (ImageView)findViewById(R.id.image); String IMAGE_URL = "https://avatars0.githubusercontent.com/u/9381246?v=3&s=460"; RequestQueue requestQueue = MySingleton.getInstance(this).getRequestQueue(); ImageLoader imageLoader = new ImageLoader(requestQueue,new LruBitmapCache(this)); imageLoader.get(IMAGE_URL,ImageLoader.getImageListener(imageView,R.drawable.zhanwei,R.drawable.zhanwei));
还有Json的Request,以前介绍过了,就不再叙述了。
7.自定义Request
由于volley中实现了三种基本请求 : string / image / json的请求,所以除了这三种基本请求之外,你如果还想要请求其他数据,可以自定义Request。
下面是文档中的Gson请求的写法:
public class GsonRequest<T> extends Request<T> { private final Gson gson = new Gson(); private final Class<T> clazz; private final Map<String,String> headers; private final Response.Listener<T> listener; public GsonRequest(String url,Class<T>clazz,Map<String,String> headers,Response.Listener<T> listener, Response.ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; } @Override public Map<String, String> getHeaders() throws AuthFailureError{ return headers != null ? headers : super.getHeaders(); } @Override protected Response<T> parseNetworkResponse(NetworkResponse networkResponse) { try{ String json = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers)); return Response.success(gson.fromJson(json,clazz), HttpHeaderParser.parseCacheHeaders(networkResponse)); }catch (UnsupportedEncodingException|JsonSyntaxException e){ return Response.error(new ParseError()); } } @Override protected void deliverResponse(T t) { listener.onResponse(t); } }
Gson是google开发的一种(Gson is a Java library that can be used to convert Java Objects into their JSON representation.)用于Java类和Json格式相互转化的工具,项目地址https://code.google.com/p/google-gson/
相关文章推荐
- Android中使用官方提供好的功能使用说明(比如系统图库获取),也作为延生学习的学习文档
- 【开源项目解析】QQ“一键下班”功能实现解析——学习Path及贝塞尔曲线的基本使用
- 【Android开源项目解析】QQ“一键下班”功能实现解析——学习Path及贝塞尔曲线的基本使用
- 【cocos2d-js官方文档】三、Bake功能使用说明
- 微信公众平台网页授权获取用户基本信息(来自官方文档)
- 使用官方帮助文档学习android
- MySQL学习 --来自官方文档的翻译
- 甲骨文官方文档,keytool使用方法, 要学习的看这个很全很权威;主要命令实录;
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- 【cocos2d-js官方文档】三、Bake功能使用说明
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- JXCELL实例学习与研究(六) 之 sheet的分页功能的实现,以及基本EXCEL公式的使用 以及补充函数说明
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- 如何使用官方文档--一项很重要的能力【不断学习】
- samtools学习及使用范例,以及官方文档详解
- SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】
- SlidesJS基本使用方法和官方文档解释