学习自Android进阶之光)
前言:
前面学习了Android自带的网络编程工具类的使用,接下来去学习一下,网络编程框架之一的Volley
开始学习
首先,我们需要去grade中添加依赖
compile 'com.mcxiaoke.volley:library:1.0.+'
其次、Volley请求网络是基于请求队列的,所以,我们需要去创建一个队列先:
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
1、使用Volley中的StringRequest
private StringRequest useVolleyGetString(@NonNull String url){
StringRequest request = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(final String response) {
hello.setText("请求结果:\n"+response);
Log.d("Volley",response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Volley",error.getMessage(),error);
}
});
return request;
}
然后,将这个请求加入到队列中去,
queue.add(useVolleyGetString("http://baidu.com"));
2、使用Volley中的JsonRequest
private JsonObjectRequest useVolleyJsonObject(@NonNull String url){
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
url, new Response.Listener<JSONObject>() {
@Override
public void onResponse(final JSONObject response) {
final HeyJson heyJson = new Gson().fromJson(response.toString(),HeyJson.class);
if(null != heyJson && null !=heyJson.getData()){
hello.setText("请求结果:\n"+heyJson.getData().get(0).getFemalename());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
return jsonObjectRequest;
}
同理,加入到队列中去就行了
queue.add(useVolleyJsonObject("https://www.apiopen.top/femaleNameApi"));
3、使用Volley中的ImageRequest加载图片
private ImageRequest useVolleyImage(@NonNull String url){
ImageRequest imageRequest = new ImageRequest(
url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
}
}, 300, 300, Bitmap.Config.RGB_565,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageView.setImageResource(R.drawable.httptest_show_error);
}
}
);
return imageRequest;
}
同理,加入到队列中
queue.add(useVolleyImage("http://img2.imgtn.bdimg.com/it/u=2008858252,3245619950&fm=27&gp=0.jpg"));
4、使用Volley中的ImageLoader加载图片
private void useVolleyImageLoader(@NonNull String url,RequestQueue queue){
ImageLoader imageLoader = new ImageLoader(queue, new BitmapCache());
ImageLoader.ImageListener listener =ImageLoader.getImageListener(imageView,R.drawable.httptest_show_error,R.drawable.httptest_show_error);
imageLoader.get(url, listener,300,300);
}
useVolleyImageLoader("http://img2.imgtn.bdimg.com/it/u=2008858252,3245619950&fm=27&gp=0.jpg",queue);
这里,涉及到了缓存的问题,我们新建一个类
public class BitmapCache implements ImageLoader.ImageCache {
//使用安卓提供的缓存机制
private LruCache<String , Bitmap> mCache;
//重写构造方法
public BitmapCache() {
int maxSize = 10*1024*1024; //缓存大小为10兆
mCache = new LruCache<String ,Bitmap>(maxSize);
}
@Override
public Bitmap getBitmap(String s) {
return mCache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
mCache.put(s,bitmap);
}
}
5、使用NetworkImageView加载图片
NetworkImageView是一个自定义控件,继承自ImageView
<com.android.volley.toolbox.NetworkImageView
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:id="@+id/iv_show1"
android:layout_height="wrap_content" />
private void useVolleyImageLoaderForNetWorkImage(@NonNull String url,RequestQueue queue){
ImageLoader imageLoader = new ImageLoader(queue,new BitmapCache());
networkImageView.setDefaultImageResId(R.drawable.httptest_show_error);
networkImageView.setErrorImageResId(R.drawable.httptest_show_error);
networkImageView.setImageUrl(url,imageLoader);
}
useVolleyImageLoaderForNetWorkImage("http://img2.imgtn.bdimg.com/it/u=2008858252," +
"3245619950&fm=27&gp=0.jpg",queue);