`
181054867
  • 浏览: 148485 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

# 简介:

 

Netroid是一个基于[Volley](https://www.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-tutorial)

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

 

# 实现原理:

 

Netroid自启动后创建由开发者指定的线程数目,每个线程由 **BlockingQueue** 进行阻塞。当有新的请求进入队列时,其中一个线程将被唤醒并获得请求对象,

然后开始执行,执行完成后线程重新回到阻塞状态,等待下一次唤醒。Netroid实现了强大的状态回调接口在请求执行过程中进行通知,

包括开始、完成、成功、重试、失败、取消、执行网络操作、应用缓存、下载进度九种状态回调,开发者可方便地获取请求的执行情况,对用户进行友好提醒。

 

# 使用方法

 

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的方法即可:

 

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

    mImageLoader.get(url, listener, 0, 0);

 

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

 

    ...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** 完成。

 

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

 

    FileDownloader mFileDownloader = new FileDownloader(mRequestQueue, 1);

 

FileDownloader将在任务添加成功时返回 `DownloadController` 实例对象,这个对象提供了查看任务执行状态、暂停、继续、取消四项必需的操作功能,

开发者只需要持有这个对象,即可随时掌控任务的所有情况。

 

    public static FileDownloader.DownloadController addFileDownload(String storeFilePath, String url, Listener<Void> listener) {

        return mFileDownloader.add(storeFilePath, url, listener);

    }

 

# 关于项目

 

Netroid开源于[Github](https://github.com/vince-styling/Netroid),提供完善的[中文文档](http://netroid.cn/)指引,所有更新都会第一时间发布于项目主页内,大家在使用过程中发现问题时或有不明白的地方,可以反馈到github,交流以促进项目功能的完善。

 

为了让开发者快速了解Netroid的所有功能点,可以下载[演示程序](http://netroid.cn/attach/netroid-sample-1.2.1.apk)先行查看效果。

 

这个垃圾站连markdown语法都不支持,堕落啊。算了,这篇文章只是方便索引,大家可去开源中国上查看详情http://my.oschina.net/styling/blog/261893。

 

当然,最舒服的做法是直接访问Netroid的官方文档站:http://netroid.cn,你懂的。

分享到:
评论

相关推荐

    com.mcxiaoke.volley:library:1.0.19 library-1.0.19.jar

    Volley是Google推出的一款高效的Android网络请求库,其主要设计目标是提供轻量级、高性能的网络通信解决方案。在Android应用开发中,处理网络请求是一项常见的任务,Volley以其便捷的API和良好的性能赢得了开发者们...

    基于Android Volley的网络请求工具

    Android Volley 是Google推出的一款高效的网络请求库,专为Android应用设计,旨在简化网络通信并优化性能。Volley提供了异步请求处理、缓存策略、线程管理以及强大的错误处理机制,使得开发者能够更加便捷地进行网络...

    com.android.volley:volley volley.jar

    com.android.volley:volley volley.jar

    基于volley的简单框架

    Volley是一款由Google推出的高效的Android网络请求库,它旨在简化网络操作并提供高效的缓存机制。基于Volley的简单框架是开发者为了进一步封装和优化Volley,使其更易于集成到项目中,通常会包含网络请求、数据库...

    volley实现下载网页数据

    Volley是Google推出的一款高效的网络请求库,特别适合Android应用中的快速、小量的数据交互。在Android开发中,Volley以其高效、易用的特点被广泛采用。本篇将详细讲解如何利用Volley实现下载网页数据。 一、Volley...

    Android Volley 请求代码

    `Android Volley` 是Google在2013年I/O大会上推出的网络请求库,它以其高效、易用的特点深受Android开发者喜爱。Volley旨在简化网络请求处理,优化性能,特别是在处理小数据量和高频率交互的场景下表现突出。下面...

    Android网络框架Volley资源库

    Android Volley 是一个高效的网络请求库,由Google专门为Android平台设计,旨在简化网络操作,提高性能并减少内存占用。Volley提供了强大的异步处理能力,能够处理各种类型的网络请求,包括HTTP、HTTPS,支持JSON和...

    Android-volley

    **Android-volley 深度...总的来说,Android-volley 是一个强大的网络通信库,适合快速开发和性能要求较高的应用。通过对源代码的学习,开发者可以更深入地理解Android网络通信的优化策略,提升应用的性能和用户体验。

    android volley 实现上传图片文件到服务器

    implementation 'com.android.volley:volley:1.2.1' } ``` 同步项目后,Volley库即可在项目中使用。 ### 3. 创建Volley RequestQueue 首先,需要创建一个`RequestQueue`实例,它是Volley处理请求的核心组件: ```...

    Android Volley框架使用实例

    Volley 是 Google 在 2013 年的 I/O 大会上推出的一个强大的网络通信库,专为 Android 应用设计,旨在简化网络请求处理并提供高效的图片加载功能。Volley 的核心设计理念是速度和易用性,它通过缓存机制和线程池优化...

    Android网络请求框架之volley框架

    总之,Volley是Android开发中处理网络请求的得力工具,它结合了性能、易用性和可扩展性,能够帮助开发者更高效地实现网络功能。通过学习和掌握Volley,可以提升Android应用在网络通信方面的体验。

    android volley

    Volley 是 Google 推出的一款高效的网络请求库,专为 Android 设计,旨在简化网络通信并优化性能。这个压缩包“volley-master”很可能包含了 Volley 源代码的完整仓库,便于开发者研究和定制。 Volley 的核心特性...

    Android Volley Demo

    Volley 是 Google 推出的一个高效的 Android 网络请求库,专为 Android 应用程序设计,旨在简化网络通信,并提供高性能、易用性和可扩展性。Volley 提供了缓存、线程管理、请求优先级排序等特性,使得在 Android 上...

    Volley实现电影列表

    Volley是Google推出的一款高效的网络请求库,专为Android平台设计。它以其轻量级、高性能和易用性而受到开发者们的青睐。本项目“Volley实现电影列表”旨在展示如何利用Volley来请求网络数据并加载图片,将数据适配...

    给android初学者的福利,网络通信框架volley-demo

    标题中的“给android初学者的福利,网络通信框架volley-demo”表明了这是一个关于Android开发的教程资源,特别关注的是Volley这个网络通信框架的实战示例。Volley是Google推出的一个高效的网络请求库,特别适合...

    Android用网络开发包volley

    Volley 是 Google 推出的一款高效、便捷的网络请求库,专为 Android 应用程序设计,旨在简化网络通信并优化性能。它结合了 AsyncHttpClient 的速度和 Universal-Image-Loader 的图片加载功能,为开发者提供了强大的...

    Android Volley源码20160414版

    10. **GsonRequest**:虽然在基本版本的 Volley 中没有包含 GsonRequest,但社区经常将其作为扩展添加进来,用于方便地处理 JSON 数据,通过集成 Gson 库实现 JSON 请求的自动化解析。 通过深入分析 20160414 版本...

    Android使用Volley实现图片轮播

    本文将详细介绍如何在Android项目中使用Volley库来实现图片轮播。 首先,我们需要在项目中集成Volley库。这可以通过在build.gradle文件中添加依赖来实现: ```gradle dependencies { implementation '...

    android Volley的基本使用详解

    Volley是Android平台上的一个网络库,由Google开发并推荐使用,主要针对移动设备的特点进行了优化,特别适合处理大量的小数据量的网络请求。Volley提供了高效、易用且功能丰富的网络通信框架,使得开发者可以方便地...

Global site tag (gtag.js) - Google Analytics