Android开源框架Volley的使用
来源:互联网 发布:华为盒子电视直播软件 编辑:程序博客网 时间:2024/05/22 05:08
一、概述
Volley是google发布的一款android网络通信库,它适合效率要求较高场景以及并发场景。它有如下特点:
- 通信更快、更简单、更健壮。开发效率会得到很大提升,稳定性也会很高。
- GET、POST请求及网络图像的高效率异步处理
- 可以对网络请求进行排序和优先级处理。
- 网络请求的缓存。
- 多级别取消请求。
- 和Activity生命周期的联动。当activity销毁时,可通过
- 不适合网络数据的上传和下载
二、网络数据请求
首先,要自定义一个Application,初始化一个Volley请求队列。并将Application注册到manifest文件中。还要添加网络权限。
public class MyApplication extends Application { public static RequestQueue queue; @Override public void onCreate() { super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); } public static RequestQueue getHttpQueue() { return queue; }}
- StringRequest
//POST请求private void volleyPost() { String url = ""; StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String s) { //请求成功的操作 } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { //请求失败的操作 } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> hashMap = new HashMap<String, String>(); hashMap.put("phone", "13838383838"); hashMap.put("key", "sbsbsbsb"); return hashMap; } }; request.setTag("abcPost"); MyApplication.getHttpQueues().add(request);
//GET请求private void volleyGet() { String url = "http://.......?phone=13838383838&key=sbsbsbsbsb"; //1.String StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String s) { Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show(); } }); request.setTag("abcGet"); MyApplication.getHttpQueues().add(request);
- JsonObjectRequest
//POSTHashMap<String, String> hashMap = new HashMap<String, String>(); hashMap.put("phone", "13838383838"); hashMap.put("key", "sbsbsbsb"); JSONObject object = new JSONObject(hashMap); JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { } }); request.setTag("abcPost"); MyApplication.getHttpQueues().add(request);
//GETJsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { //请求成功的操作 } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { // 请求失败的操作 } }); request.setTag("abcGet"); MyApplication.getHttpQueues().add(request);
- JsonArrayRequest
和JsonObjectRequest大同小异,略。
三、获取网络图片
首先做一下准备工作。。。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_img" android:layout_width="match_parent" android:layout_height="wrap_content" /> <com.android.volley.toolbox.NetworkImageView android:id="@+id/net_iv" android:layout_width="120dp" android:layout_height="120dp" android:layout_centerHorizontal="true" android:layout_marginTop="30dp"/></RelativeLayout>
//去manifest.xml中注册和添加权限public class MyApplication extends Application { public static RequestQueue queue; @Override public void onCreate() { super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); } public static RequestQueue getHttpQueue() { return queue; }}
iv_img = (ImageView) this.findViewById(R.id.iv_img);networkIv = (NetworkImageView) this.findViewById(R.id.net_iv);String url = "http://www.baidu.com/img/bdlogo.png";
/** * 使用ImageRequest请求网络图片 */mageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { iv_img.setImageBitmap(bitmap); }}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { iv_img.setBackgroundResource(R.mipmap.ic_launcher); }});MyApplication.getHttpQueue().add(request);
/** * 使用ImageLoader缓存网络图片 */ ImageLoader loader = new ImageLoader(MyApplication.getHttpQueue(), new BitmapCache()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv_img, R.mipmap.ic_launcher, R.mipmap.ic_launcher); loader.get(url, listener);
public class BitmapCache implements ImageLoader.ImageCache { public LruCache<String, Bitmap> cache; public int max = 10 * 1024 * 1024; //设置最大缓存大小 public BitmapCache() { cache = new LruCache<String, Bitmap>(max) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } @Override public Bitmap getBitmap(String s) { return cache.get(s); } @Override public void putBitmap(String s, Bitmap bitmap) { cache.put(s, bitmap); }}
/** * 使用NetworkImageView加载网络图片 */ ImageLoader loader = new ImageLoader(MyApplication.getHttpQueue(), new BitmapCache()); networkIv.setDefaultImageResId(R.mipmap.ic_launcher); networkIv.setErrorImageResId(R.mipmap.ic_launcher); networkIv.setImageUrl(url, loader);
NetWorkResponse类
/** * Data and headers returned from {@link Network#performRequest(Request)}. */public class NetworkResponse { /** * Creates a new network response. * @param statusCode the HTTP status code * @param data Response body * @param headers Headers returned with this response, or null for none * @param notModified True if the server returned a 304 and the data was already in cache * @param networkTimeMs Round-trip network time to receive network response */ public NetworkResponse(int statusCode, byte[] data, Map<String, String> headers, boolean notModified, long networkTimeMs) { this.statusCode = statusCode; this.data = data; this.headers = headers; this.notModified = notModified; this.networkTimeMs = networkTimeMs; } public NetworkResponse(int statusCode, byte[] data, Map<String, String> headers, boolean notModified) { this(statusCode, data, headers, notModified, 0); } public NetworkResponse(byte[] data) { this(HttpStatus.SC_OK, data, Collections.<String, String>emptyMap(), false, 0); } public NetworkResponse(byte[] data, Map<String, String> headers) { this(HttpStatus.SC_OK, data, headers, false, 0); } /** The HTTP status code. */ public final int statusCode; /** Raw data from this response. */ public final byte[] data; /** Response headers. */ public final Map<String, String> headers; /** True if the server returned a 304 (Not Modified). */ public final boolean notModified; /** Network roundtrip time in milliseconds. */ public final long networkTimeMs;}
0 0
- Android开源框架Volley的使用
- Android Volley 框架的使用
- Android Volley 框架的使用
- Android Volley框架的使用
- Android Volley 框架的使用
- 开源框架Volley的使用
- 开源框架Volley的使用《一》
- Android Volley框架使用
- Android开源框架Volley
- Android开源框架Volley
- android的volley框架使用日志1
- 【Android】Volley框架的使用简介
- Android Volley 框架的使用(一)
- Android Volley框架的使用(二)
- Android Volley框架的使用(三)
- Android网络框架Volley的快速使用
- Android网络请求框架Volley的使用
- Android中google volley框架的使用
- Unity热更新专题(四)Unity热更新之LuaInterface(下)
- iOS多线程学习之GCD
- numpy教程:逻辑函数Logic functions
- 欢迎使用CSDN-markdown编辑器
- python_基础04
- Android开源框架Volley的使用
- SD卡知识
- 深入理解 Docker 镜像 json 文件
- 股市猜测6个历史和未来的最高最低点位
- SQL Server CROSS APPLY和OUTER APPLY的应用详解
- maven 构建 全注解 spring mvc + mybatis mysql 项目
- 编程日记-Python-2015.08.30
- 【离散数学】实验一 利用真值表法求取主析取范式以及主合取范式的实现
- UVa 10976:Fractions Again?!(水题)