Netroid:强大、快速、易用、可扩展基于Volley实现的Android Http库

简介:

Netroid是一个基于Volley 实现的Android Http库。提供异步执行网络请求、缓存返回结果、批量图片加载、大文件断点下载的常见Http交互功能。致力于避免每一个项目重复开发基础Http功能,实现显著地缩短开发周期的愿景。git

实现原理:

Netroid自启动后建立由开发者指定的线程数目,每一个线程由 BlockingQueue 进行阻塞。当有新的请求进入队列时,其中一个线程将被唤醒并得到请求对象, 而后开始执行,执行完成后线程从新回到阻塞状态,等待下一次唤醒。Netroid实现了强大的状态回调接口在请求执行过程当中进行通知, 包括开始、完成、成功、重试、失败、取消、执行网络操做、应用缓存、下载进度九种状态回调,开发者可方便地获取请求的执行状况,对用户进行友好提醒。github

使用方法

Netroid库的主入口是RequestQueue,一般状况下在Application.onCreate()方法中初始化,做为全局单例对象存放:缓存

Network network = new BasicNetwork(new HurlStack(Const.USER_AGENT, null), HTTP.UTF_8);
// RequestQueue在建立时可指定使用HttpURLConnection仍是HttpClient来执行请求,同时可指定硬盘缓存的目录位置及上限大小
RequestQueue mQueue = new RequestQueue(network, 4,
    new DiskCache(new File(ctx.getCacheDir(), Const.HTTP_DISK_CACHE_DIR_NAME), Const.HTTP_DISK_CACHE_SIZE));
mQueue.start();

在须要发起Http请求时,只须要建立一个Request实例,添加入RequestQueue便可,Netroid会部署并在线程容许的状况下执行,并经过Listener的各个接口回调执行结果到主线程:网络

StringRequest request = new StringRequest(url, new Listener<String>() {
    ProgressDialog mPrgsDialog;

    @Override
    public void onPreExecute() {
        mPrgsDialog = ProgressDialog.show(Activity.this, null, "loading...", true, true);
    }

    // cancel the dialog with onFinish() callback
    @Override
    public void onFinish() {
        mPrgsDialog.cancel();
    }

    @Override
    public void onSuccess(String response) {
        Toast.makeText(Activity.this, "response is : " + response, 2000).show();
    }

    @Override
    public void onError(NetroidError error) {
        Toast.makeText(Activity.this, error.getMessage(), 2000).show();
    }

    @Override
    public void onCancel() {
        Toast.makeText(Activity.this, "request was cancel", 2000).show();
    }
});

// add the request to RequestQueue, will execute quickly if has idle thread
mQueue.add(request);

图片加载

使用Netroid提供的ImageLoader能够很是方便地实现图片加载功能,ImageLoader须要在初始化RequestQueue时建立,由于其做为Netroid的一个组件,依赖于Netroid的请求调用机制:异步

// ImageLoader在建立时可指定图片的内存缓存方案
ImageLoader mImageLoader = new SelfImageLoader(
        mRequestQueue, new BitmapImageCache(Const.HTTP_MEMORY_CACHE_SIZE));

在须要加载图片的地方,只须要调用ImageLoader的方法便可:ide

ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, 0, 0);
mImageLoader.get(url, listener, 0, 0);

Netroid提供了继承自ImageView的NetworkImageView来专门处理ListView、GridView图片频繁刷新加载的问题:ui

...Inner Adapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    NetworkImageView imvCover = (NetworkImageView) convertView.findViewById(R.id.imvCover);
    imvCover.setImageUrl(book.getImageUrl(), mImageLoader);
}
...

大文件下载

Netroid实现的 FileDownloader 对断点续传方式的大文件下载提供了支持,其内部维护一个下载队列,因此在建立时须要指定最大并行任务数, 超出限制的任务将自动进入等待队列。在设置最大并行任务数后,开发者只须要往队列中不断添加任务,其它的事情均由 FileDownloader 完成。this

FileDownloader的使用方法跟ImageLoader相同,在Application中建立一个单例的对象,在须要使用的地方调用接口:google

FileDownloader mFileDownloader = new FileDownloader(mRequestQueue, 1);

FileDownloader将在任务添加成功时返回 DownloadController 实例对象,这个对象提供了查看任务执行状态、暂停、继续、取消四项必需的操做功能, 开发者只须要持有这个对象,便可随时掌控任务的全部状况。url

public static FileDownloader.DownloadController addFileDownload(String storeFilePath, String url, Listener<Void> listener) {
    return mFileDownloader.add(storeFilePath, url, listener);
}

关于项目

Netroid开源于Github,提供完善的中文文档指引,全部更新都会第一时间发布于项目主页内,你们在使用过程当中发现问题时或有不明白的地方,能够反馈到github,交流以促进项目功能的完善。

为了让开发者快速了解Netroid的全部功能点,能够下载演示程序先行查看效果。

相关文章
相关标签/搜索