Android使用Volley请求网络

         前面写过一篇关于Volley源码的分析,本次介绍Volley的使用方法,使用Volley真的不是什么难事,只是为了帮助入门的童鞋能够快速的使用,大神绕道即可!

一、准备

    1、新建一个Android工程,并在AndroidManifest中添加权限<uses-permission android:name="android.permission.INTERNET" />
      2、下载volley.jar文件,拷贝到工程目录下的libs文件夹中,此时Eclipse将自动把jar包添加到工程的library。部分不会自动添加貌似是lib文件夹,针对不自动加入到的,可以手动添加,操作图示如下:


选择Add to Build Path即可。

二、创建一个管理RequestQueue的管理器
        RequestQueue为Volley业务处理的核心中转器,我们用户在使用的时候直接通过RequestQueue来使用就可以了。创建一个用于管理RequestQueue对象的类ResourceManager,代码如下:

public class RequestManager {
    private RequestQueue mRequestQueue;
    private PersistentCookieStore mCookieStore;

    public RequestManager(Context context) {
        mCookieStore = new PersistentCookieStore(context.getApplicationContext());
        mCookieStore.removeAll();
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient.setCookieHandler(new CookieManager(mCookieStore, CookiePolicy.ACCEPT_ALL));
        mRequestQueue = Volley.newRequestQueue(context, new OkHttpStack(okHttpClient));
        start();
    }

    private static RequestManager mInstance;

    public static RequestManager getInstance() {
        if (mInstance == null) {
            synchronized (RequestManager.class) {
                mInstance = new RequestManager(MyApplication.getApp());
            }
        }
        return mInstance;
    }

    public void start() {
        mRequestQueue.start();
    }

    public void stop() {
        mRequestQueue.stop();
    }

    public void addRequest(Request<?> request) {
        addRequest(request, null);
    }

    public void addRequest(Request<?> request, RetryPolicy retryPolicy) {
        if (request == null) {
            return;
        }
        if (retryPolicy == null) {
            retryPolicy = RequestManager.newDefaultRetryPolicy();
        }
        request.setRetryPolicy(retryPolicy);
        mRequestQueue.add(request);
    }

    public void cancelAll() {
        mRequestQueue.cancelAll(new RequestQueue.RequestFilter() {
            @Override
            public boolean apply(Request<?> request) {
                return true;
            }
        });
    }

    public static DefaultRetryPolicy newDefaultRetryPolicy() {
        return new DefaultRetryPolicy();
    }

    public static DefaultRetryPolicy newLongRetryPolicy() {
        return new DefaultRetryPolicy(1000 * 60, 1, 0);
    }
}
public class OkHttpStack extends HurlStack {

    private OkHttpClient okHttpClient;

    /**
     * Create a OkHttpStack with default OkHttpClient.
     */
    public OkHttpStack() {
        this(new OkHttpClient());
    }

    /**
     * Create a OkHttpStack with a custom OkHttpClient
     *
     * @param okHttpClient Custom OkHttpClient, NonNull
     */
    public OkHttpStack(OkHttpClient okHttpClient) {
        this.okHttpClient = okHttpClient;
    }

    @Override
    protected HttpURLConnection createConnection(URL url) throws IOException {
        OkUrlFactory okUrlFactory = new OkUrlFactory(okHttpClient);
        HttpURLConnection urlConnection = okUrlFactory.open(url);
        urlConnection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0");
        return urlConnection;
    }
}
创建完这两个类之后,剩下的具体实现工作就交给Volley内部去实现了。要注意在创建RequestManager的时候,要开始启用RequestQueue.start,这样才能驱动内部工作。

三、使用
这里演示中网络上获取一张图片,首先要先准备好图片的URL,大体的思路是创建一个获取图片的请求,然后将请求添加到RequestQueue中,就这么简单

RawRequest rawRequest = new RawRequest(addr, new Response.Listener<byte[]>() {
            @Override
            public void onResponse(byte[] data) {
                synchronized (mResourceTask) {
                    mResourceTask.remove(addr);
                }
                try {
                    f.createNewFile();
                    FileOutputStream out = new FileOutputStream(f);
                    out.write(data);
                    out.close();
                    if (cb != null)
                        cb.onSuccess(id, filePath);
                } catch (Exception e) {
                    if (cb != null)
                        cb.onError();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                LogUtil.loge("down load resource failed: " + addr);
                synchronized (mResourceTask) {
                    mResourceTask.remove(addr);
                }
                if (cb != null)
                    cb.onError();
            }
        });
        RequestManager.getInstance().addRequest(rawRequest);
如果程序执行成功,将会回调onResponse方法,反之发生异常则回调Response.ErrorListener方法。将下载下的数据保存到文件中,通过Drawable.createFromPath(文件名)就可以获取到下载后的图片了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值