package com.applite.volleydemo;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.util.Log;
import android.util.LruCache;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import com.android.volley.Request;
import com.android.volley.Request.Method;
import com.android.volley.AuthFailureError;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
/*
* 如何导入 Properties=》Libraries=》add external files
*
* Volley是android平台的网络通讯库,目的:更快,更简单,更健壮
* 适合通讯不大,但是通讯频繁的东西
* volley提供的功能:
* 1.json,图片数据的获取(异步)
* 2.网路请求的偏序
* 3.网络请求的优先级处理
* 4.缓存
* 5.多级别的取消请求
* 6.与activity生命周期联动
*
* 获取Volley
*
* */
public class MainActivity extends Activity {
private ImageView imageView;
private NetworkImageView networkImageView;
private ImageView imageView3;
//请求队列对象 非常适合高并发 不必为了为一个http请求创建一个对象 一般一个Activity中创建一个
RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestQueue=Volley.newRequestQueue(this);
init();
getStringVolley();
postVolley();
getJSONVolley();
imageRequestVolley();
loadImageVolley();
NetWorkImageVolley();
}
private void init(){
imageView=(ImageView)findViewById(R.id.imageView);
networkImageView=(NetworkImageView)findViewById(R.id.imageView2);
imageView3=(ImageView)findViewById(R.id.imageView3);
}
public void getStringVolley(){
String JSONDataUrl="http://fanyi.youdao.com/openapi.do?keyfrom=applite&key=793234865&type=data&doctype=json&version=1.1&q=sex";
StringRequest stringRequest=new StringRequest(JSONDataUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODO Auto-generated method stub
Log.d("getStringVolley", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.e("getStringVolley", error.getMessage(),error);
}
});
requestQueue.add(stringRequest);
}
public void postVolley(){
String JSONDataUrl="http://fanyi.youdao.com/openapi.do?keyfrom=applite&key=793234865&type=data&doctype=json&version=1.1&q=sex";
StringRequest stringRequest=new StringRequest(Method.POST, JSONDataUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODO Auto-generated method stub
Log.d("postVolley", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.e("postVolley", error.getMessage(),error);
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map=new HashMap<String,String>();
map.put("key", "你好");
map.put("value", "测试");
return super.getParams();
}
};
requestQueue.add(stringRequest);
}
/*
* 获取json字符串 别忘记添加网络访问权限
* */
public void getJSONVolley(){
String JSONDataUrl="http://fanyi.youdao.com/openapi.do?keyfrom=applite&key=793234865&type=data&doctype=json&version=1.1&q=sex";
//请求对象
JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, JSONDataUrl, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// TODO Auto-generated method stub
System.out.println("相应内容:"+response);
Log.e("getJSONVolley", response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// TODO Auto-generated method stub
System.out.println("网络数据获取异常");
}
}
);
//一定要注意要把请求添加进来
requestQueue.add(jsonObjectRequest);
}
/*
*
ImageRequest的构造函数接收六个参数,
第一个参数就是图片的URL地址,这个没什么需要解释的。
第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。
第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。
第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。
第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。*/
public void imageRequestVolley(){
String imageUrl="http://b.hiphotos.baidu.com/image/pic/item/574e9258d109b3debd2d5269cebf6c81800a4c24.jpg";
ImageRequest imageRequest=new ImageRequest(imageUrl, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
imageView3.setImageBitmap(bitmap);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageView3.setImageResource(R.drawable.ic_launcher);
}
});
requestQueue.add(imageRequest);
}
public void loadImageVolley(){
String imageUrl="http://b.hiphotos.baidu.com/image/pic/item/574e9258d109b3debd2d5269cebf6c81800a4c24.jpg";
//RequestQueue requestQueue=Volley.newRequestQueue(this);
//缓存
final LruCache<String, Bitmap> lruCache=new LruCache<String, Bitmap>(20);
ImageCache imageCache=new ImageCache() {
@Override
public void putBitmap(String key, Bitmap value) {
lruCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return lruCache.get(key);
}
};
//创建imageloader对象
ImageLoader imageLoader=new ImageLoader(requestQueue, imageCache);
//获取一个imagelistenser对象
ImageListener listener=imageLoader.getImageListener(imageView,R.drawable.ic_launcher, R.drawable.ic_launcher);
//调用imageloader的get方法加载网络上的图片
imageLoader.get(imageUrl, listener);
}
public void NetWorkImageVolley(){
String imageUrl="http://b.hiphotos.baidu.com/image/pic/item/574e9258d109b3debd2d5269cebf6c81800a4c24.jpg";
//RequestQueue requestQueue=new Volley().newRequestQueue(this);
final LruCache<String, Bitmap> lruCache=new LruCache<String, Bitmap>(20);
ImageCache imageCache=new ImageCache() {
@Override
public void putBitmap(String key, Bitmap value) {
lruCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return lruCache.get(key);
}
};
ImageLoader imageLoader=new ImageLoader(requestQueue, imageCache);
networkImageView.setTag("url");//why 乱序
networkImageView.setImageUrl(imageUrl, imageLoader);
}
}