在Google 2013 I/O大会上出现了一个新框架Volley,这玩意吸取async-http和universal-image-loader的特点,精简了很多代码,所以是短请求、高并发的居家必备,杀人越货的不二之选啊,常用方法如下:
public class VolleyActivity extends Activity {
private RequestQueue requestQueue;
private Button velloy_btn;
private ImageView volloy_iv;
private TextView volloy_tv;
private com.android.volley.toolbox.NetworkImageView mNetworkImageView;
private WindowManager windowManager;
private String textPath = "http://www.baidu.com";
private String jsonPath = "http://m.weather.com.cn/data/101010100.html";
private String imgPath = "http://192.168.1.102:8080/cacheImage/photo.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.velloy);
requestQueue = Volley.newRequestQueue(this);
velloy_btn = (Button) findViewById(R.id.velloy_btn);
volloy_iv = (ImageView) findViewById(R.id.velloy_iv);
volloy_tv = (TextView) findViewById(R.id.velloy_tv);
mNetworkImageView = (NetworkImageView) findViewById(R.id.net_work_image_view);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
final int width = windowManager.getDefaultDisplay().getWidth();
final int height = windowManager.getDefaultDisplay().getHeight();
velloy_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ReqeustText();
// RequestJSON();
// RequestImg(width, height);
// LoaderImage(imgPath, width, height);
NetworkImageView(imgPath);
}
});
}
// 使用第一种方法 返回图片:使用volley自带的API ImageRequest
private void RequestImg(int width, int height) {
ImageRequest request = new ImageRequest(imgPath,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
volloy_iv.setImageBitmap(response);
}
}, width, height, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
volloy_iv.setImageResource(R.drawable.ic_launcher);
}
});
// 加入到请求队列中
requestQueue.add(request);
}
// 使用第二种方法 加载网络图片:使用volley自带的API ImageLoader+图片缓存
private void LoaderImage(String netPath, int width, int height) {
// 图片队列+图片缓存
ImageLoader imageLoader = new ImageLoader(requestQueue,
new Bitmapcache());
ImageListener imageListener = ImageLoader.getImageListener(volloy_iv,
R.drawable.ic_launcher, R.drawable.icon);
imageLoader.get(netPath, imageListener, width, height);
}
// 使用第三种方法加载图片:在布局文件中,用volly的类来做控件+图片缓存
public void NetworkImageView(String path) {
ImageLoader imageLoader = new ImageLoader(requestQueue,
new Bitmapcache());
ImageListener imageListener = ImageLoader.getImageListener(volloy_iv,
R.drawable.ic_launcher, R.drawable.icon);
imageLoader.get(path, imageListener);
mNetworkImageView.setDefaultImageResId(R.drawable.ic_launcher);
mNetworkImageView.setErrorImageResId(R.drawable.icon);
mNetworkImageView.setImageUrl(path, imageLoader);
}
// 图片缓存
class Bitmapcache implements ImageCache {
private LruCache<String, Bitmap> mCache;
public Bitmapcache() {
// 定义缓存的大小
int maxSize = 5 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
// JSON返回
private void RequestJSON() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(jsonPath,
null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("TAG", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("TAG", error.getMessage(), error);
}
});
requestQueue.add(jsonObjectRequest);
}
// 文本返回
private void ReqeustText() {
StringRequest request = new StringRequest(textPath,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
volloy_tv.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
requestQueue.add(request);
}
}
在上面代码中使用到了一个NetworkImageView控件,这个控件是volley自带的,所以布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/velloy_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Velloy" />
<TextView
android:id="@+id/velloy_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/velloy_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/net_work_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
</LinearLayout>