Android使用Volley请求网络

来源:互联网 发布:nba2k17麦迪身体数据 编辑:程序博客网 时间:2024/05/16 03:44

         前面写过一篇关于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(文件名)就可以获取到下载后的图片了。

1 0
原创粉丝点击