网络编程(三)Volley

学习自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);



猜你喜欢

转载自blog.csdn.net/full_stack_developer/article/details/79874614
今日推荐