Volley可以 自动调度网络请求 多个并发的网络连接 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致 支持请求优先级 支持取消请求的强大API,可以取消单个请求或多个 易于定制 健壮性:便于正确的更新UI和获取数据 包含调试和追踪工具等优点。
Volley特别适合数据量不大但是通信频繁的场景。
1、首先下载一个volley.jar包导入libs文件下,下载地址http://download.csdn.net/detail/u010049692/7813127。
2、新布局代码中添加几个按钮,两个图片按钮和一个textview用于显示数据
3、由于要显示网络图片,所以添加fresco,需要在build.gradle 中添加下面代码,并在需要在新建一个MyApplication类,记得在权限中添加。还要添加网络权限代码
compile 'com.facebook.fresco:fresco:0.12.0'
package com.example.apple.volley;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
/**
* Created by apple on 16/12/29.
*/
public class MyApplication extends Application {
public MyApplication() {
super();
}
@Override
public void onCreate() {
super.onCreate();
//Fresco初始化
Fresco.initialize(getApplicationContext());
}
}
4、先实现get 请求,首先创建一个队列,然后创建一个请求,将url传进去,请求中有两个方法,当正确接受数据时可以打印出来,错误时也可以显示出来,最后添加到队列中,这就完成了get请求。返回的数据可自己处理。
/**
* get
*/
public void get(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
StringRequest stringRequest =new StringRequest(url, new Response.Listener() {
//正确接收数据回调
@Override
public void onResponse(String s) {
try {
JSONObject jsonObject = new JSONObject(s);
// TestData testData= new Gson().fromJson(s, TestData.class);
// Log.e(TAG,"length="+jsonObject.getJSONObject("trailers").length());
// for (int i = 0;i
private void post(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener() {
@Override
public void onResponse(String s) {
volley_result.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volley_result.setText("加载错误"+volleyError);
}
}){
@Override
protected Map getParams() throws AuthFailureError {
Map map = new HashMap<>();
// map.put("value1","param1");//传入参数
return map;
}
};
//将post请求添加到队列中
requestQueue.add(stringRequest);
}
private void json(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener() {
@Override
public void onResponse(JSONObject jsonObject) {
//TestData data = new Gson().fromJson(String.valueOf(jsonObject),TestData.class);
volley_result.setText(jsonObject.toString());
Log.e(TAG,"data="+jsonObject);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volley_result.setText("加载错误"+volleyError);
}
});
//将创建的请求添加到队列中
requestQueue.add(jsonObjectRequest);
}
/**
* 加载图片
*/
private void image(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg";
//第二个参数,第三个:宽高,第四个:图片质量
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener() {
@Override
public void onResponse(Bitmap bitmap) {
//正确接收图片
volley_image.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volley_image.setImageResource(R.mipmap.ic_launcher);
}
});
//将创建的请求添加到队列中
requestQueue.add(imageRequest);
}
8、加载网络图片,这个可以新建一个BitmapCache类用来缓存图片
private void imageLoader(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
// ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
// @Override
// public Bitmap getBitmap(String s) {
// return null;
// }
//
// @Override
// public void putBitmap(String s, Bitmap bitmap) {
//
// }
// });
ImageLoader imageLoader = new ImageLoader(requestQueue,new BitmapCache());//带缓存
//加载图片
String url = "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg";
//加载不到,加载失败
ImageLoader.ImageListener imageLister = imageLoader.getImageListener(volley_imageNet,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
imageLoader.get(url,imageLister);
}
package com.example.apple.volley.entity;
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
/**
* Created by apple on 16/12/29.
* 图片缓存
*/
public class BitmapCache implements ImageLoader.ImageCache{
private LruCache mCache;
public BitmapCache() {
int maxSize = 10* 1024 *1024;//10m
mCache = new LruCache(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);
}
}
10、加载网络图片
/**
* netWorkImageView
*/
private void netWorkImageView(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个imageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue,new BitmapCache());
//默认图片设置
volley_imageNet.setImageResource(R.mipmap.ic_launcher);
//加载图片
String url = "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg";
volley_imageNet.setImageURI(url,imageLoader);
}
11、最后可以在stop中添加取消所有队列
@Override
protected void onStop() {
super.onStop();
//取消队列里所有的请求
requestQueue.cancelAll(this);
}
完整代码:
package com.example.apple.volley;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
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.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.apple.volley.entity.BitmapCache;
import com.facebook.drawee.view.SimpleDraweeView;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* JSON,图像等的异步下载;
网络请求的排序(scheduling)
网络请求的优先级处理
缓存
多级别取消请求
和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button volley_get;
private Button volley_post;
private Button volley_json;
private Button volley_imageRequest;
private Button volley_imageLader;
private Button netWorkImageView;
private ImageView volley_image;
private SimpleDraweeView volley_imageNet;
private TextView volley_result;
private final String TAG = "MainActivity";
RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
volley_get = (Button)findViewById(R.id.volley_get);
volley_get.setOnClickListener(this);
volley_post = (Button)findViewById(R.id.volley_post);
volley_post.setOnClickListener(this);
volley_json = (Button)findViewById(R.id.volley_json);
volley_json.setOnClickListener(this);
volley_imageRequest = (Button)findViewById(R.id.volley_imageRequest);
volley_imageRequest.setOnClickListener(this);
volley_imageLader = (Button)findViewById(R.id.volley_imageLader);
volley_imageLader.setOnClickListener(this);
netWorkImageView = (Button)findViewById(R.id.netWorkImageView);
netWorkImageView.setOnClickListener(this);
volley_image = (ImageView) findViewById(R.id.volley_image);
volley_imageNet = (SimpleDraweeView) findViewById(R.id.volley_imageNet);
volley_result = (TextView)findViewById(R.id.volley_result);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.volley_get://get请求
get();
break;
case R.id.volley_post://post请求
post();
break;
case R.id.volley_json://json请求 JsonObjectRequest{} JsonArrayRequest[]
json();
break;
case R.id.volley_imageRequest://imageRequest加载图片
image();
break;
case R.id.volley_imageLader://imageLader加载图片
imageLoader();
break;
case R.id.netWorkImageView:
netWorkImageView();
break;
default:
break;
}
}
/**
* get
*/
public void get(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
StringRequest stringRequest =new StringRequest(url, new Response.Listener() {
//正确接收数据回调
@Override
public void onResponse(String s) {
try {
JSONObject jsonObject = new JSONObject(s);
// TestData testData= new Gson().fromJson(s, TestData.class);
// Log.e(TAG,"length="+jsonObject.getJSONObject("trailers").length());
// for (int i = 0;i() {
@Override
public void onResponse(String s) {
volley_result.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volley_result.setText("加载错误"+volleyError);
}
}){
@Override
protected Map getParams() throws AuthFailureError {
Map map = new HashMap<>();
// map.put("value1","param1");//传入参数
return map;
}
};
//将post请求添加到队列中
requestQueue.add(stringRequest);
}
/**
* json
*/
private void json(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener() {
@Override
public void onResponse(JSONObject jsonObject) {
//TestData data = new Gson().fromJson(String.valueOf(jsonObject),TestData.class);
volley_result.setText(jsonObject.toString());
Log.e(TAG,"data="+jsonObject);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volley_result.setText("加载错误"+volleyError);
}
});
//将创建的请求添加到队列中
requestQueue.add(jsonObjectRequest);
}
/**
* 加载图片
*/
private void image(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
String url = "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg";
//第二个参数,第三个:宽高,第四个:图片质量
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener() {
@Override
public void onResponse(Bitmap bitmap) {
//正确接收图片
volley_image.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volley_image.setImageResource(R.mipmap.ic_launcher);
}
});
//将创建的请求添加到队列中
requestQueue.add(imageRequest);
}
/**
* imageLoader
*/
private void imageLoader(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个请求
// ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
// @Override
// public Bitmap getBitmap(String s) {
// return null;
// }
//
// @Override
// public void putBitmap(String s, Bitmap bitmap) {
//
// }
// });
ImageLoader imageLoader = new ImageLoader(requestQueue,new BitmapCache());//带缓存
//加载图片
String url = "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg";
//加载不到,加载失败
ImageLoader.ImageListener imageLister = imageLoader.getImageListener(volley_imageNet,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
imageLoader.get(url,imageLister);
}
/**
* netWorkImageView
*/
private void netWorkImageView(){
//创建一个请求队列
requestQueue = Volley.newRequestQueue(MainActivity.this);
//创建一个imageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue,new BitmapCache());
//默认图片设置
volley_imageNet.setImageResource(R.mipmap.ic_launcher);
//加载图片
String url = "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg";
volley_imageNet.setImageURI(url,imageLoader);
}
@Override
protected void onStop() {
super.onStop();
//取消队列里所有的请求
requestQueue.cancelAll(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
实现效果图片和代码下载地址: http://download.csdn.net/detail/u011324501/9725043