Volley是在2013年的Google I/O 2013大会上发布的,是我们的网络通信更快,更简单,更方便。对于初学者来讲是一个很好的框架。
简单来说,它提供了如下的便利功能:
声明一个新的RequestQueue对象
private RequestQueue mRequestQueue;
在onCreate初始化mRequestQueue
mRequestQueue = Volley.newRequestQueue(this);
声明并使用Request
JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.i(TAG,response.toString()); parseJSON(response); va.notifyDataSetChanged(); pd.dismiss(); } },new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.i(TAG,error.getMessage()); } }); mRequestQueue.add(jr);
Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。
JsonObjectRequest:返回JSON对象。
JsonArrayRequest:返回JsonArray。
StringRequest:返回String,这样可以自己处理数据,更加灵活。
private Button myBtn; private ImageView myImageView; private ImageLoader imageLoader; private RequestQueue requestQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_loader); requestQueue= Volley.newRequestQueue(getApplicationContext());//请求队列 imageLoader=new ImageLoader(requestQueue, new BitmapCache()); myBtn= (Button) findViewById(R.id.myImageLoaderBtn); myImageView=(ImageView)findViewById(R.id.myImageLoader); myBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageLoader.ImageListener listener = ImageLoader.getImageListener(myImageView,R.drawable.ic_launcher, R.drawable.ic_launcher); //后两个参数分别是加载的默认图和加载出错后要显示的图片 imageLoader.get("http://192.168.191.1:8080/JerehEdu/image/logo.jpg", listener,200,200); } }); }
在加载图片的时候使用到了BitmapCache这样一个类,这个类是我们继承了Volley中的ImageCache实现的,它能够对我们加载的图片进行一个缓存。
public class BitmapCache implements 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 value) { // TODO Auto-generated method stub return value.getRowBytes() * value.getHeight(); } }; } @Override public Bitmap getBitmap(String arg0) { // TODO Auto-generated method stub return mCache.get(arg0); } @Override public void putBitmap(String arg0, Bitmap arg1) { // TODO Auto-generated method stub mCache.put(arg0, arg1); } }
现在应用到的网络通讯框架有很多像如Volley这样有很多,最近也在研究xutils,感觉这个也很不错,也希望和大家交流经验。