快速开发型框架
,DbUtils(orm),ViewUtils(ioc),HttpUtils,BitmapUtils通信框架
,和xutils中的HttpUtils,BitmapUtilsRequestQueue
用来执行请求的请求队列Request
用来构造一个请求对象Request对象
主要有以下几种类型: StringRequest
响应的主体为字符串JsonArrayRequest
发送和接收JSON数组JsonObjectRequest
发送和接收JSON对象ImageRequest
发送和接收ImageVolley到底有哪些特点呢?
接下来就一一对其使用方式做一个汇总。
package com.example.volleydemo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initStringRequest(); } /** * StringRequest使用 */ private void initStringRequest() { Button btn1 = (Button) findViewById(R.id.btn1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //1、创建StringRequest对象 String url = "http://www.baidu.com"; StringRequest stringRequest = new StringRequest(url , new Listener<String>() { @Override public void onResponse(String response) { // 请求成功回调 System.out.println("success---->>"+response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // 失败回调 System.out.println("error---->>"+error); } }); //2、创建requestQueue RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); //3、发起网络请求----》把reuest防盗requestqueue中 requestQueue.add(stringRequest); } }); } }
请求服务器。直接返回一个数据的jsonObject对象
/** * JsonObjectRequest的使用 */ private void initJsonObjectRequest() { findViewById(R.id.btn2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //1、创建JsonObjectRequest对象 String url = "http://192.168.1.100:8080/getviruses.json"; JSONObject jsonRequest = null;//表示post请求,直接post一个jsonobject JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url , jsonRequest , new Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { //从jsonobject获取数据 String desc = response.optString("md5");//不需要捕获异常的api System.out.println("success---->>"+desc); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { System.out.println(error); } }); //2、创建requestQueue RequestQueue queue = Volley.newRequestQueue(MainActivity.this); //3、发起网络请求----》把reuest放到requestqueue中 queue.add(jsonObjectRequest); } }); }其中有一个小知识点,很少知道:即:response.optString("origin");
请求服务器。直接返回一个数据的jsonArrayt对象。和2非常接近。只不过是把Object换成Array。稍作修改罢了。
/** * ImageRequest的使用 */ private void initImageRequest() { findViewById(R.id.btn3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String url = "http://192.168.1.100:8080/meinv.jpg"; ImageRequest imageRequest = new ImageRequest(url , new Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { iv.setImageBitmap(response); } }, 0, 0, Bitmap.Config.ARGB_4444, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); //2、创建requestQueue RequestQueue queue = Volley.newRequestQueue(MainActivity.this); //3、发起网络请求----》把reuest放到requestqueue中 queue.add(imageRequest); } }); }
4.1 使用步骤
ImageRequest仍旧是一个request对象,所以使用方式和StringRequest、JsonObjectRequest、JsonArrayRequest十分相似。
步骤:
第一步、第三步我们在上篇文章中已经做好了,如果不清楚的话可以去上一篇文章查看。
4.2 分析构造函数
源码中的构造函数是这样定义的:
public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight, Config decodeConfig, Response.ErrorListener errorListener) { super(Method.GET, url, errorListener); setRetryPolicy( new DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIES, IMAGE_BACKOFF_MULT)); mListener = listener; mDecodeConfig = decodeConfig; mMaxWidth = maxWidth; mMaxHeight = maxHeight; }
默认的请求方式是GET,初始化方法需要传入:图片的url,一个响应结果监听器,图片的最大宽度,图片的最大高度,图片的颜色属性,出错响应的监听器。
说明:图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小
/** Socket timeout in milliseconds for image requests */ private static final int IMAGE_TIMEOUT_MS = 1000; /** Default number of retries for image requests */ private static final int IMAGE_MAX_RETRIES = 2; /** Default backoff multiplier for image requests */ private static final float IMAGE_BACKOFF_MULT = 2f;
4.3 解释maxWidth,maxHeight参数
注释中详细说明了图片宽高的意义和作用,为了便于理解我再详细说一下。
先来完整解释下注释的意思:
举个例子:
我的图片原本像素是:850x1200.
当maxWidth = 0,maxHeight = 0时,最终得到的bitmap的宽高是850x1200
当maxWidth = 0,maxHeight = 600时,得到的bitmap是425x600.这就说明它会按照一个不为0的边的值,将图片进行等比缩放。
当maxWidth = 100,maxHeight = 600时,我们得到的bitmap竟然是100x141,是按照100进行等比缩小后的图片,而不是100x600.
这是因为源码中,当宽高分别缩放后,会按照缩放比例大的哪个比例去缩放。就是上边第三种情况:宽缩小8.5倍,高也按照这个比例去缩放。