码迷,mamicode.com
首页 > 其他好文 > 详细

Volley用法(官网)

时间:2015-06-19 12:00:42      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:volley   网络   请求   框架   图片   

准备工作:

官网上下载库文件,如果登陆不了,可以从这里下载集成好的.jar。下载之后把它作为你项目的支持库。

发送一个简单的请求:

final TextView mTextView = (TextView) findViewById(R.id.text);
...

// 实例化请求队列
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";

// 从提供的URL中请求字符串相应。
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Display the first 500 characters of the response string.
        mTextView.setText("Response is: "+ response.substring(0,500));
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText("That didn‘t work!");
    }
});
// 添加这个请求到请求队列中。
queue.add(stringRequest);

建立一个请求队列:

创建一个队列单例

/**
 * Created by peng on 2015/6/18.
 */
public class MySingleton {
    private static MySingleton mInstance;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static Context mCtx;

    private MySingleton(Context context) {
        mCtx = context;
        mRequestQueue = getRequestQueue();

        mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
            private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20);

            @Override
            public Bitmap getBitmap(String url) {
                return cache.get(url);
            }

            @Override
            public void putBitmap(String url, Bitmap bitmap) {
                cache.put(url, bitmap);
            }
        });
    }

    public static synchronized MySingleton getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new MySingleton(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            // getApplicationContext() 这个方法很关键
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}

用队列单例发起一个请求

// 获取请求队列
RequestQueue queue = MySingleton.getInstance(this.getApplicationContext()).
    getRequestQueue();
...

// 添加一个请求到队列中
MySingleton.getInstance(this).addToRequestQueue(stringRequest);

请求一张图片:

ImageRequest:它可以确保图片请求发生在工作线程。
ImageLoader:它会提供一个内存缓存,使用它设置一张图片会提高性能。
NetworkImageView:它是基于ImageLoader,当你是从网络上请求图片时,可以比ImageView更有效。

使用ImageRequest

ImageView mImageView;
String url = "http://i.imgur.com/7spzG.png";
mImageView = (ImageView) findViewById(R.id.myImage);
...

// 从指定的URL取回图片,并在UI显示。
ImageRequest request = new ImageRequest(url,
    new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap bitmap) {
            mImageView.setImageBitmap(bitmap);
        }
    }, 0, 0, null,
    new Response.ErrorListener() {
        public void onErrorResponse(VolleyError error) {
            mImageView.setImageResource(R.drawable.image_load_error);
        }
    });
// 通过单例访问请求队列
MySingleton.getInstance(this).addToRequestQueue(request);

使用ImageLoader

ImageLoader mImageLoader;
ImageView mImageView;

private static final String IMAGE_URL =
    "http://developer.android.com/images/training/system-ui.png";
...
mImageView = (ImageView) findViewById(R.id.regularImageView);

// 从单例类中获取ImageLoader。
mImageLoader = MySingleton.getInstance(this).getImageLoader();
mImageLoader.get(IMAGE_URL, ImageLoader.getImageListener(mImageView,
         R.drawable.def_image, R.drawable.err_image));

使用ImageLoader和NetworkImageView

<com.android.volley.toolbox.NetworkImageView
        android:id="@+id/networkImageView"
        android:layout_width="150dp"
        android:layout_height="170dp"
        android:layout_centerHorizontal="true" />
ImageLoader mImageLoader;
NetworkImageView mNetworkImageView;
private static final String IMAGE_URL =
    "http://developer.android.com/images/training/system-ui.png";
...

mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);

// 从单例类中获取ImageLoader。
mImageLoader = MySingleton.getInstance(this).getImageLoader();

// 设置要加载图片的URL和用来执行请求的ImageLoader 
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);

Volley用法(官网)

标签:volley   网络   请求   框架   图片   

原文地址:http://blog.csdn.net/pengkv/article/details/46558731

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!