Rx-Volley 自己来封装
自从15年接触了RxJava,对函数式编程越发的喜爱。以前Android项目上网络层都是统一的使用Volley,已经对网络请求的回调,多个回调嵌入各种不爽了,趁着年前任务轻松,赶紧的将Volley封装一下,投向RxJava的怀抱!!
Volley除了提供异步处理回调接口外,还支持同步调用网络,主要是使用RequestFuture进行同步调用。所以Volley封装成Rx-Volley只需要以此为入口即可。
为了方便维护和升级,已将代码提交到git:https://github.com/cmlbeliever/RX-Volley
核心代码如下:
package com.cml.lib.rxvolley.rxvolley; import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.RetryPolicy;
import com.android.volley.toolbox.RequestFuture;
import com.cml.lib.rxvolley.framework.RequestManager; import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers; /**
* Created by cmlBeliever on 2016/2/1.
* <p>
* 将Volley请求封装成RxJava结构返回,注意:所有的请求都在IO线程中处理
*/
public class RxRequest { /**
* 发送post请求
*
* @param url
* @param target
* @param <T>
* @return
*/
public static <T> Observable<T> post(String url, Class<?> target) {
return request(url, target, Request.Method.POST, new DefaultRetryPolicy());
} /**
* 发送post请求
*
* @param url
* @param target
* @param <T>
* @return
*/
public static <T> Observable<T> post(String url, Class<?> target, RetryPolicy retryPolicy) {
return request(url, target, Request.Method.POST, retryPolicy);
} /**
* 发送Get请求
*
* @param url
* @param target
* @param <T>
* @return
*/
public static <T> Observable<T> get(String url, Class<?> target) {
return request(url, target, Request.Method.GET, new DefaultRetryPolicy());
} /**
* 发送Get请求
*
* @param url
* @param target
* @param <T>
* @return
*/
public static <T> Observable<T> get(String url, Class<?> target, RetryPolicy retryPolicy) {
return request(url, target, Request.Method.GET, retryPolicy);
} public static <T> Observable<T> request(String url, Class<?> target, int method, RetryPolicy retryPolicy) { final RequestFuture<T> requestFuture = RequestFuture.newFuture(); final GsonRequest<T> request = new GsonRequest<T>(target, method, url, null, requestFuture, requestFuture);
request.setRetryPolicy(retryPolicy);
request.setTag(url); requestFuture.setRequest(request); return Observable.create(new Observable.OnSubscribe<T>() { @Override
public void call(Subscriber<? super T> subscriber) {
try {
//只在被订阅后才进行网络请求处理
RequestManager.getRequestQueue().add(request);
if (!subscriber.isUnsubscribed() && !requestFuture.isCancelled()) {
subscriber.onNext(requestFuture.get());
subscriber.onCompleted();
}
} catch (Exception e) {
subscriber.onError(e);
}
} }).subscribeOn(Schedulers.io());
} /**
* 取消请求
*
* @param url
*/
public static void cancel(final String url) {
RequestManager.getRequestQueue().cancelAll(new RequestQueue.RequestFilter() {
@Override
public boolean apply(Request<?> request) {
return request.getTag().equals(url);
}
});
}
}
使用方式:
String url = "https://raw.githubusercontent.com/cml8655/note/master/data/test.json";
RxRequest.<MyModel>post(url, MyModel.class).subscribe(new Subscriber<MyModel>() {
@Override
public void onCompleted() {
Log.i("RxRequest", "onCompleted");
} @Override
public void onError(Throwable e) {
Log.e("RxRequest", "onError", e);
} @Override
public void onNext(MyModel myModel) {
Log.i("RxRequest", "onNext==>" + myModel);
}
});
Rx-Volley 自己来封装的更多相关文章
- volley二次封装
产品中使用Volley框架已有多时,本身已有良好封装的Volley确实给程序开发带来了很多便利与快捷.但随着产品功能的不断增加,服务器接口的不断复杂化,直接使用Volley原生的JSONObjectR ...
- Volley的简单封装
算了一下,好像有很久没有写博客了.其实,关于写博客这件事,我从来没有把他当成我的一种任务,而是在学习过程中的一种总结和自我发现,同样也是为了练一练文笔,说不定有一天,我也能出一本书像<第一行代码 ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- 转-封装网络请求库,统一处理通用异常 (基于volley网络请求库)
http://blog.csdn.net/kroclin/article/details/40540761 一.前言 volley的发布让网络请求也变得十分便利,但是我们通常懒得很想用一两句代码实现一 ...
- Volley框架之网络请求和图片加载
Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 (1).封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强.(2). ...
- Android常见工具类封装
MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...
- Android框架之Volley与Glide
PS:在看到这个题目的同时,你们估计会想,Volley与Glide怎么拿来一块说呢,他们虽然不是一个框架,但有着相同功能,那就是图片处理方面.首先我们先来看一下什么volley,又什么是glide. ...
- Xutils, OKhttp, Volley, Retrofit对比
Xutils这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对view进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框架依赖非常的 ...
- Android网络编程系列之Volley总结
前言 Volley的中文翻译为“齐射.并发”,是在2013年的Google大会上发布的一款Android平台网络通信库,具有网络请求的处理.小图片的异步加载和缓存等功能,能够帮助 Android AP ...
- Android:Volley源代码解析
简单实例 Volley是一个封装HttpUrlConnection和HttpClient的网络通信框架,集AsyncHttpClient和Universal-Image-Loader的长处于了一身.既 ...
随机推荐
- [linux][MongoDB] mongodb学习(二):命令使用数据库
使用数据库 # 查看数据库 > show dbs admin 0.000GB local 0.000GB # 查看表(集合) > show tables # 删除集合 > db.us ...
- 前端面试的那些事儿(1)~JavaScript 原始数据类型
前言 自我总结面试常问的一些细节,方便不断回顾与补充.第一次发表文章,如有问题或不足之处望及时指出. JavaScript 原始数据类型 1.1 基础数据类型 7大基础数据类型 boolean nul ...
- Java 多线程实现方式三:实现 Callable 接口
完整套路 java 通过实现Callable 接口来实现多线程相比较于继承Thread 接口和 实现Runnable 接口比较麻烦,但好处是可以有返回值. 基本套路: 1. 创建目标对象 2. 创建执 ...
- C#线程学习笔记
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/Thread.html,记录一下学习,方便后面资料查找 一.线程的介绍 进程(Proce ...
- Win7+Linux双系统,完美解决删除Linux后出现的任何问题!
首先,进入到Win7,安装MiniTool Partition Wizard Home Edition删除掉Linux分区, 点Yes 然后选中 这里选中这个,重写MBR,开机神马grub神马问题都没 ...
- DES加密解密算法C++实现
DES加密算法并不难,是由一些简单的变换得来的,难的是要有足够的耐心.蒟蒻并不想说自己用了多久才把代码写好的. 代码: 我真的太难了QAQ #include<iostream> using ...
- [Linux] 检查是否已有进程在运行
出处:sblim-sfcb-1.4.9 / sfcBroker.c int process_is_running() { #define STRBUF_LEN 512 #define BUF_LEN ...
- MinIO 的分布式部署
目录 1 前言 2 分布式存储可靠性常用方法 2.1 冗余 2.2 校验 3 MinIO存储机制 3.1 概念理解 3.2 纠删码EC(Erasure Code) 3.3 存储形式 4 部署实践 4. ...
- js 实现图片瀑布流效果,可更改配置参数 带完整版解析代码[waterFall.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片瀑布流效果 页面需求 1 ...
- 计算2的n次幂htm代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...