google在2013年的io大会上推出了自己的网络操作的框架,volley,非常好用,对大量并发操作做出了很好的处理,适用于频繁加载少量数据的操作。
1.首先需要加载volley.jar文件到自己的工程里
A.首先是加载网络数据的StringRequest
大体上分为以下几个步骤:
a.创建请求的队列对象,RequestQueue
RequestQueue queen = Volley.newRequestQueue(StringRequestActivity.this);
b.创建字符串请求对象StringRequest,其构造参数非别代表:请求的url,请求成功的回调函数,请求失败的回调函数
c.将请求添加到请求队列中
queen.add(request);
StringRequestActivity.java代码如下:
public class StringRequestActivity extends Activity {
WebView view;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
String text = msg.getData().getString("value");
view.loadDataWithBaseURL(null, text, "text/html", "utf-8", null);
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_string_request);
view = (WebView) findViewById(R.id.show);
new Thread(){
public void run() {
RequestQueue queen = Volley.newRequestQueue(StringRequestActivity.this);
StringRequest request = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("value",response);
msg.setData(bundle);
msg.what = 1;
handler.sendMessage(msg);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
String s = error.toString();
Log.d("error",error.toString());
}
});
queen.add(request);
};
}.start();
}
}
B.访问json的JsonObjectRequest
步骤和StringRequest大体相同
a.创建请求的队列对象,RequestQueue
JsonObjectRequestqueen = Volley.newRequestQueue(StringRequestActivity.this);
b.创建字符串请求对象JsonObjectRequest,其构造参数非别代表:请求的url,请求成功的回调函数,请求失败的回调函数
c.将请求添加到请求队列中
以访问天气网为例,加载网络json数据,关键代码如下:RequestQueue queen = Volley.newRequestQueue(JsonRequestActivity.this);
JsonObjectRequest request = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html",null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// TODO Auto-generated method stub
Message msg = new Message();
Bundle bundle = new Bundle();
String sg = response.toString();
bundle.putString("value",response.toString());
msg.setData(bundle);
msg.what = 1;
handler.sendMessage(msg);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
queen.add(request);
};
接下来是访问网络图片的ImageRequest,关键代码如下:
RequestQueue queen = Volley.newRequestQueue(MainActivity.this);
ImageRequest request = new ImageRequest("http://www.iteye.com/upload/logo/user/569437/9c92e228-fe12-34a6-afbc-4c01152b1a37.jpg"
,new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
// TODO Auto-generated method stub
imageview.setImageBitmap(response);
}
}
,200
,200
,Config.RGB_565
,new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
imageview.setImageResource(R.drawable.ic_launcher);
}
});
queen.add(request);
ImageRequest的构造参数分别代表:图片的url地址,加载成功的回调函数,限定图片的宽度,限定图片的高度,设置图片的质量,加载失败的回调函数。
ImageRequest用来加载网络图片已经很方便了,可是volley还给我们提供了更好用的ImageLoader
使用ImageLoader可以加载,压缩并缓存网络图片,使用步骤简单易懂,如下:
a.创建请求队列:RequestQueue,
RequestQueue queen = Volley.newRequestQueue(MainActivity.this);
b.创建用来缓存图片的类: MyImageCache继承自 ImageCache
class MyImageCache implements ImageCache {
private LruCache<String,Bitmap> mCache;
public MyImageCache() {
int max = 1024*1024*10;
mCache = new LruCache<String, Bitmap>(max) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// TODO Auto-generated method stub
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
// TODO Auto-generated method stub
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
// TODO Auto-generated method stub
mCache.put(url, bitmap);
}
}
c.创建ImageLoader对象
ImageLoader imageLoader = new ImageLoader(queen,new MyImageCache());
参数分别代表:请求队列,缓存图片的对象
d.创建ImageListener对象
ImageListener listener = imageLoader.getImageListener(imagetwo, R.drawable.three,R.drawable.ic_launcher);
参数:用来显示图片的ImageView,加载失败显示的图片,加载时显示的图片
e.调用imageloader.get(url,listener,width,height)方法加载图片
imageLoader.get("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener,200,200);
至此volley框架的基本学习已经告一段落。
源码下载:http://download.csdn.net/detail/mockingbirds/8146843